我正在阻止一个谓词来编码Prolog。我需要对两个谓词进行编码:
如果我打电话:u([a,b,c,d,e,f], X).它会给X=[a,b], X=[b,c], X=[c,d] ...
u([a,b,c,d,e,f], X).
X=[a,b], X=[b,c], X=[c,d]
如果我打电话:v([a,b,c,d,e,f], X).它会给X=[a,b], X=[c,d], X=[e,f] ...
v([a,b,c,d,e,f], X).
X=[a,b], X=[c,d], X=[e,f]
多谢!
虽然false https://stackoverflow.com/users/772868/false的答案更优雅,这里有一个更适合初学者的解决方案u/2.
u/2
u([X,Y|_], [X,Y]). u([_|Tail], XY):- u(Tail,XY).
第一条规则说[X,Y]表示列表中的两个连续元素(如果它们是该列表中的前两个元素)。
[X,Y]
第二条规则规定,如果两个元素在列表尾部的某个位置连续,则它们在列表中是连续的。
现在尝试寻找类似的解决方案v/2.
v/2