list - 反向/回文的递归Prolog谓词

标签 list prolog reverse palindrome dcg

  • 我能否获得一个具有两个参数的递归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/

    相关文章:

    recursion - 如何停止PROLOG中的无限递归

    prolog - 逻辑编程中如何处理重复更新?

    list - 两个列表的算术 Prolog

    r - 如何有效地反转整数向量?

    java - 数组中的手动倒序 (Java)

    java - 使用位移位反转数字

    python - 如何简单地覆盖被替换元素的列表

    java - 从特定索引开始搜索 java.util.List

    list - Prolog - 列表包含 2x 元素 X

    java - 获取一系列List<Object>列表