列出Prolog中的元组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列出Prolog中的元组相关的知识,希望对你有一定的参考价值。
我正在尝试在Prolog中编写一个子句,它接受一个列表并返回边的谓词。例如:
?- listpairs([1, 2, 3], X, Y).
X = 1
Y = 2;
X = 2
Y = 3;
这是我到目前为止所尝试过的,并没有到达任何地方。
listpairs([H], H, H).
listpairs([H1,H2|T], X, Y) :-
X is H1,
Y is H2,
listpairs([H2|T], X, Y).
如果有人可以提供帮助,我将不胜感激。
答案
问题是通过写:
X is H1,
Y is H2
X,Y得到实例化,这意味着它们的值不能进一步改变,因此你的谓词将会公开,因为在下一次递归迭代中你试图重新实例化X,Y。
尝试:
listpairs([H1,H2], H1, H2).
listpairs([H1,H2,_|_], H1, H2).
listpairs([_,H2|T], X, Y) :- listpairs([H2|T], X, Y).
例:
?- listpairs([1, 2, 3, 4, 5], X, Y).
X = 1,
Y = 2 ;
X = 2,
Y = 3 ;
X = 3,
Y = 4 ;
X = 4,
Y = 5 ;
false.
以上是关于列出Prolog中的元组的主要内容,如果未能解决你的问题,请参考以下文章