Prolog:Palindrome谓词永远不会成功

时间:2014-05-10 10:16:12

标签: prolog palindrome

我开发了一种回文检查算法,只需反转给定的元素列表;使用天真的逆转。然后程序检查它是否产生相同的列表。但我似乎有一个我无法弄清楚的问题。程序总是返回false。这是我迄今为止开发的程序......

reverseCurrentList([H|T],ReversedList):-
    reverseCurrentList(T,RevT),
    append(RevT,[H],ReversedList).

isPalindrome(GivenList):- 
    reverseCurrentList(GivenList,ReversedList),
    GivenList=@=ReversedList.

编辑:最终版本

最后,我决定使用以下代码:

% A palindrome can be read forward or backward; e.g. [x,a,m,a,x]

% is_palindrome(L) :- L is a palindrome list

is_palindrome(L) :-
   reverse(L,L).

1 个答案:

答案 0 :(得分:1)

您的reverseCurrentList规则缺少基本子句,因此它永远不会成功。递归调用继续从列表中取出项目,直到列表为空,此时[H|T]不再统一,因此规则失败。

将第二个子句添加到您的程序中:

reverseCurrentList([], []).