我对从大量连词组成的公式感兴趣(一个更大的问题的一部分)。我想编写一个类似这样的程序:
:- get_params(conj(conj(a,b),c),X)
并返回连词的所有参数列表,即X=[a,b,c]
。目前我可以做到
:- get_params(conj(a,b),X)
获取X=[a,b]
使用简单的Prolog模式匹配,但你会如何处理
这样的事情 :- get_params(conj(conj(a,b),c),X)
获取X=[a,b,c]
看起来很简单,但我整天都在苦苦挣扎!
答案 0 :(得分: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].
答案 1 :(得分:2)
假设所有的conj函子都是二进制的:
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]).