2010-11-09 87 views
1

我對由大量連詞組成的公式感興趣(更大的問題的一部分)。我想寫一個程序,它是這樣的:搜索Prolog結構

:- get_params(conj(conj(a,b),c),X)

,並返回連詞即X=[a,b,c]的所有參數的列表。目前,我可以做

:- get_params(conj(a,b),X)使用簡單的Prolog的模式匹配來獲取X=[a,b]

但你會如何去這樣做的東西,如

:- get_params(conj(conj(a,b),c),X)得到X=[a,b,c]

這似乎很簡單,但我一整天都在苦苦掙扎!

回答

2

假設所有連詞仿函數是二進制的:

get_params(X, Y, L) :- 
    get_params(X, L1), 
    get_params(Y, L2), 
    append(L1, L2, L). 
get_params(conj(X, Y), L) :- 
    get_params(X, Y, L), !. 
get_params(A, [A]). 
+0

你不知道我是如此複雜,這很簡單。謝謝 :)。 – ale 2010-11-09 17:00:54

+0

不客氣。不要讓Prolog的巫術感覺把你扔到你的軌道上。通常很簡單。例如,函子只是標記的數據結構,如你所見。 – 2010-11-09 17:09:04

4

因爲你所描述的列表,可以考慮使用DCG符號:

params(conj(A,B)) --> !, params(A), params(B). 
params(X)   --> [X]. 

例子:

?- phrase(params(conj(conj(a,b),c)), Ps). 
Ps = [a, b, c].