首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重“\=”[Prolog]

多重“\=”[Prolog]
EN

Stack Overflow用户
提问于 2017-10-21 23:42:26
回答 1查看 215关注 0票数 0

如何更简洁地表达以下连词?

代码语言:javascript
复制
condition(X1, X2, X3, X4, X5) :- 
    X1 \= X2, 
    X1 \= X3, 
    X1 \= X4, 
    X1 \= X5, 
    X2 \= X3, 
    X2 \= X4, 
    X2 \= X5, 
    X3 \= X4, 
    X3 \= X5, 
    X4 \= X5.

理想情况下,我希望使用内置/库谓词的一个目标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-22 08:46:59

您还可以选择使用maplist/2定义谓词uniques/1,如果列表由唯一元素组成,它就会成功。那么谓词条件/5将充当调用谓词:

代码语言:javascript
复制
:- use_module(library(apply)).        % for maplist/2

condition(X1, X2, X3, X4, X5) :-
   uniques([X1,X2,X3,X4,X5]).

uniques([]).
uniques([X|Xs]) :-
   maplist(dif(X),Xs),
   uniques(Xs).

?- condition(1,2,3,4,5).
true.

?- condition(1,2,3,4,1).
false.

uniques/1可用于任意列表:

代码语言:javascript
复制
?- uniques([]).
true.

?- uniques([1,a,6,f(X)]).
true.

?- uniques([A,B,C]).
dif(A, C),
dif(A, B),
dif(B, C).

?- uniques([A,B,A]).
false.

?- uniques(U).
U = [] ;
U = [_G265] ;
U = [_G392, _G395],
dif(_G392, _G395) ;
U = [_G489, _G492, _G495],
dif(_G489, _G495),
dif(_G489, _G492),
dif(_G492, _G495) ;
.
.
.
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46869175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档