Palindrome谓词使用prolog

时间:2016-01-26 21:29:45

标签: list prolog palindrome

我是Prolog的新手,我有一个练习,要求制作一个返回布尔值的回文谓词? 如果列表是Palindrome,则此布尔值为true,否则返回false

palindrom([X|Xs],bool) .

我应该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用“声明方式”,例如

空名单是回文。

palindrome([]).

只有一个元素的列表是回文

palindrome([_]).

现在,可以说如果列表是回文,如果我们删除此列表的第一个和最后一个元素,我们必须找到另一个回文,所以

palindrome(L) :-
    append([X|T], [X], L),
    palindrome(T).

答案 1 :(得分:0)

首先,它不起作用它是一个谓词,所以  palindrom就像比较列表与它的反转,如L = [x,y,x],L1 = [x,y,x]然后你反转列表befor,

<强>码

palindrom(Xs):-palindrom(Xs,Xs,[]). % the second Xs is copy of Xs in input and [] is the auxliare
palindrom([],Xs,Xs).
palindrom([Y|Ys],Xs,Zs):- palindrom(Ys,Xs,[Y|Zs]).

版本2

 palindrom(Xs) :- reverse(Xs,Xs).

注意:反向/ 2反转列表但在此谓词中返回布尔值,因为第二个是反转列表的输入

<强>结果

| ?- palindrom([a,b,c]).
no

| ?- palindrom([a,b,a]).
yes

有关详细信息,请使用?-trace,palindrom("radar").查看其内部工作情况