列表中的连续元素

Zer*_*ero 3 prolog dcg

我阻止了Prolog 中代码的谓词。我需要编码这两个谓词:

如果我打电话: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]...

非常感谢!

Tud*_*riu 5

虽然false的答案更优雅,但这里有一个更适合初学者的谓词解决方案u/2

u([X,Y|_], [X,Y]).
u([_|Tail], XY):- u(Tail,XY).
Run Code Online (Sandbox Code Playgroud)

第一条规则表示,[X,Y]如果它们是列表中的前两个元素,则表示列表中的两个连续元素。

第二条规则规定,如果两个元素在列表尾部的某处是连续的,则它们在列表中是连续的。

现在尝试为 找到类似的解决方案v/2