相关疑难解决方法(0)

AUBUC的Prolog联盟

我最近开始学习Prolog,我无法解决如何组合三个列表的问题.

我能够组合2个列表:

%element
element(X,[X|_]).
element(X,[_|Y]):-
               element(X,Y).

%union

union([],M,M).
union([X|Y],L,S) :- element(X,L),union(Y,L,S).
union([X|Y],L,[X|S]) :- (not(element(X,L))),union(Y,L,S).
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

list prolog

20
推荐指数
2
解决办法
2605
查看次数

memberchk/2的声明性用法

memberchk/2是一个通常定义的谓词,它是这样定义的member/2:

memberchk(X, Xs) :-
   once(member(X, Xs)).
Run Code Online (Sandbox Code Playgroud)

因此它只能成功地获得第一个答案member/2.它的完整程序意义不适合纯粹的关系.作为其非关系行为的一个例子考虑

?- memberchk(b, [X,b]), X = a.
false.

?- X = a, memberchk(b, [X,b]).
X = a.
Run Code Online (Sandbox Code Playgroud)

另一方面,在许多情况下,memberchk/2将使用充分实例化的参数调用,其中可以将其视为纯关系的有效近似.

背后的一个纯粹的关系是memberd/2(使用if_/3):

memberd(E, [X|Xs]) :-
   if_(E = X, true, memberd(E, Xs) ).
Run Code Online (Sandbox Code Playgroud)

memberchk/2对于充分实例化的案例,是否还有其他可以近似的纯关系?

换句话说:是否是memberd/2一个完整的,声明性的替代品,memberchk/2或者是否仍然存在memberchk/2无法替代的合法案例memberd/2

prolog logical-purity

17
推荐指数
1
解决办法
689
查看次数

标签 统计

prolog ×2

list ×1

logical-purity ×1