搜索Prolog结构

搜索Prolog结构,prolog,dcg,Prolog,Dcg,我对由许多连词组成的公式感兴趣(这是一个更大问题的一部分)。我想写一个程序,它采用如下方式: :-get_参数(conj(conj(a,b),c),X) 并返回连词的所有参数列表,即X=[a,b,c]。现在我能做什么 :-get_参数(conj(a,b),X)获取X=[a,b] 使用简单的Prolog模式匹配,但是您将如何进行以下操作: :-get_参数(conj(conj(a,b,c),X)获取X=[a,b,c] 这看起来很简单,但我已经挣扎了一整天了 假设所有conj函子都是二进制的: ge

我对由许多连词组成的公式感兴趣(这是一个更大问题的一部分)。我想写一个程序,它采用如下方式:

:-get_参数(conj(conj(a,b),c),X)

并返回连词的所有参数列表,即
X=[a,b,c]
。现在我能做什么

:-get_参数(conj(a,b),X)
获取
X=[a,b]

使用简单的Prolog模式匹配,但是您将如何进行以下操作:

:-get_参数(conj(conj(a,b,c),X)
获取
X=[a,b,c]


这看起来很简单,但我已经挣扎了一整天了

假设所有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]).

假设所有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]).

既然你在描述一个列表,考虑使用DCG符号:

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

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

既然你在描述一个列表,考虑使用DCG符号:

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

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

你不知道我做的有多复杂,这太简单了。谢谢:)。不客气。不要让Prolog的伏都教感觉把你从你的轨道上抛出去。这通常很简单。例如,正如你所看到的,函子只是被标记的数据结构。你不知道我把它做得有多复杂,这太简单了。谢谢:)。不客气。不要让Prolog的伏都教感觉把你从你的轨道上抛出去。这通常很简单。例如,可以看到,函子只是标记了数据结构。