相关疑难解决方法(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
查看次数

列表上的成对关系

如果给定关系的列表元素的所有对都为真,则以下高阶谓词成功.对于这种关系,是否存在共同的或更好的,更具意图的名称?

我对这个名字的最初动机是,在all_different/1,如果元素成对不同,通常会有一个被描述为真的约束.事实上,更倾向于说元素都是不同的,但我经常纠正(由Prolog程序员同意)使用pairwise不同.事实上,这种约束现在最自然地表达为pairwise(#\=, Zs).

pairwise(Rel_2, Xs) :-
   i_pairwise(Xs, Rel_2).

i_pairwise([], _).
i_pairwise([X|Xs], Rel_2) :-
   maplist(call(Rel_2,X),Xs),
   i_pairwise(Xs, Rel_2).
Run Code Online (Sandbox Code Playgroud)

正如@aBathologist所观察到的,成对不是正确的词,因为它也可能对非反身有意义Rel.

此外,关系Rel不是一个完整的关系,因为call(Rel, X, X)可能会失败,但pairwise(Rel, Xs)仍然可以成功.

我甚至还在鼓励(a->a->Bool)->[a]->Bool.但是Hayoo 发现它:名字pairwise与逐点相反.

看MO和数学:

terminology prolog meta-predicate

11
推荐指数
1
解决办法
493
查看次数

标签 统计

prolog ×2

list ×1

meta-predicate ×1

terminology ×1