搜索Prolog结构
问题描述:
我对由大量连词组成的公式感兴趣(更大的问题的一部分)。我想写一个程序,它是这样的:搜索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]
这似乎很简单,但我一整天都在苦苦挣扎!
答
假设所有连词仿函数是二进制的:
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]).
答
因为你所描述的列表,可以考虑使用DCG符号:
params(conj(A,B)) --> !, params(A), params(B).
params(X) --> [X].
例子:
?- phrase(params(conj(conj(a,b),c)), Ps).
Ps = [a, b, c].
你不知道我是如此复杂,这很简单。谢谢 :)。 – ale 2010-11-09 17:00:54
不客气。不要让Prolog的巫术感觉把你扔到你的轨道上。通常很简单。例如,函子只是标记的数据结构,如你所见。 – 2010-11-09 17:09:04