搜索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的伏都教感觉把你从你的轨道上抛出去。这通常很简单。例如,可以看到,函子只是标记了数据结构。