搜索Prolog结构

时间:2010-11-09 16:20:16

标签: prolog dcg

我对从大量连词组成的公式感兴趣(一个更大的问题的一部分)。我想编写一个类似这样的程序:

:- 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]

看起来很简单,但我整天都在苦苦挣扎!

2 个答案:

答案 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]).