1

我对由许多连词组成的公式(更大问题的一部分)感兴趣。我想写一个这样的程序:

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

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

4

2 回答 2

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].
于 2010-11-09T20:39:05.003 回答
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]).
于 2010-11-09T16:55:12.453 回答