Q
序言语句语法
0
A
回答
2
刚刚冲洗和重复:
?- List = [a,b,c,d],member(X,List),member(Y,List).
如果你想那么两种截然不同的元素,
?- List = [a,b,c,d],member(X,List),member(Y,List),X \== Y.
然后在谓词包起来,如果这就是你追求的:
two_members(X,Y,List) :-
member(X,List),
member(Y,List),
X \== Y.
+1
通过使用“dif/2”表达术语不平等你即使使用非基础术语,也可以保留[标签:逻辑纯度]。 – repeat 2015-06-23 09:03:07
1
我已经有些不同地解释了谓词two_members/3
的预期语义:
- 我们要吸取项目从给定的列表
Ls
X
和Y
。 Ls
必须至少有两个two_members/3
的列表项才能成功。X
和Y
可能相等,如果Ls
包含X
至少两次。
基于内置的谓词select/3
和member/2
我们定义:
two_members(X,Y,Ls) :-
select(X,Ls,Ls0),
member(Y,Ls0).
让我们运行一些查询!
?- two_members(X,Y,[a,b,c,d]).
X = a, Y = b ;
X = a, Y = c ;
X = a, Y = d ;
X = b, Y = a ;
X = b, Y = c ;
X = b, Y = d ;
X = c, Y = a ;
X = c, Y = b ;
X = c, Y = d ;
X = d, Y = a ;
X = d, Y = b ;
X = d, Y = c ;
false.
如果发生哪些项目在Ls
不止一次:首先,查询OP中的问题提出?
?- two_members(X,Y,[a,a,b]).
X = a, Y = a ;
X = a, Y = b ;
X = a, Y = a ; % redundant answer
X = a, Y = b ; % redundant answer
X = b, Y = a ;
X = b, Y = a ; % redundant answer
false.
以上多余的答案呢?他们从哪里来,我们可以避免它们?
冗余答案来自select/3
和member/3
:
?- select(X,[a,a,b],Xs).
X = a, Xs = [a,b] ;
X = a, Xs = [a,b] ; % redundant answer
X = b, Xs = [a,a] ;
false.
?- member(X,[a,a,b]).
X = a ;
X = a ; % redundant answer
X = b.
为了摆脱这些冗余的,我们可以用 memberd/2
代替member/2
和 selectd/3
而不是select/3
。让我们再次运行以上查询:
?- selectd(X,[a,a,b],Xs). X = a, Xs = [a,b] ; X = b, Xs = [a,a] ; false. ?- memberd(X,[a,a,b]). X = a ; X = b ; false.
多余的答案不见了!因此,让我们据此重新定义two_members/3
:
two_members(X,Y,Ls) :- selectd(X,Ls,Ls0), memberd(Y,Ls0).
这里是上面的two_members/3
查询用来给这些多余的答案:
?- two_members(X,Y,[a,a,b]).
X = a, Y = a ;
X = a, Y = b ;
X = b, Y = a ;
false. % all of above redundant answers have gone!
相关问题
- 1. 序言,定子句语法
- 2. c语言中的多语句算法
- 3. Gist.github序言语法高亮
- 4. 序言语法问题
- 5. 语言:Python(vers3.3);如果在里面语句和if语句
- 6. SQL CASE语句对战条件语句编程语言
- 7. 语法语法和语言学
- 8. 用于语句顺序的BNF语法
- 9. 在C语言中切换语句
- 10. C语言中的switch语句
- 11. C语言中的try-catch语句C
- 12. 多语言AND语句在mm表中
- 13. 将语句转换为序言代码
- 14. 序言循环和条件语句?
- 15. 编程语言语法
- 16. 为语法指定语言
- 17. 语法与支持语言
- 18. 语法与C语言
- 19. Microsoft.Speech通用语言语法
- 20. 以Python语言评估的if语句的顺序
- 21. C语言程序在switch语句中跳过部分函数。
- 22. DCG分析器序言中给定下面的语法逻辑语句
- 23. SQL Server:PDO`IN`语句语法
- 24. Scheme - if语句的语法
- 25. SQL语句语法差异
- 26. JavaScript语法 - if语句
- 27. Sqlite语句语法错误
- 28. WQL Like语句和语法
- 29. sql插入语句语法
- 30. MySQL插入语句语法?
你将不得不澄清这个问题有点。 – 2009-12-23 02:41:06
看到我的意见在这个答案:http://stackoverflow.com/questions/1939054/how-to-solve-this-problem-by-prolog/1941239#1941239 – user198729 2009-12-23 03:35:17