示例查询和预期结果:
α-反向([a,b,c],L)。
L = [c,b,a]。
palindrome
的参数组成的递归Prolog谓词,如果给定列表为回文,则返回true。具有预期结果的示例查询:
α-回文([a,b,c])。
错误的。
?-回文([b,a,c,a,b])。
真的。
最佳答案
广告1:不可能将reverse/2
定义为(直接将thx编辑为@repeat:tail)递归谓词-除非您允许使用辅助谓词。
广告2:
palindrome(X) :- reverse(X,X).
但是最简单的方法是用DCG定义这样的谓词:
iseq([]) --> [].
iseq([E|Es]) --> iseq(Es), [E].
reverse(Xs, Ys) :-
phrase(iseq(Xs), Ys).
palindrome(Xs) :-
phrase(palindrome, Xs).
palindrome --> [].
palindrome --> [E].
palindrome --> [E], palindrome, [E].
关于list - 反向/回文的递归Prolog谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6442750/