• 我能否获得一个具有两个参数的递归Prolog谓词,称为反向,它返回列表的反向:

    示例查询和预期结果:

    α-反向([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/

    10-10 06:16