我是Prolog的新手,我有一个练习,要求制作一个返回布尔值的回文谓词? 如果列表是Palindrome,则此布尔值为true,否则返回false
palindrom([X|Xs],bool) .
我应该怎么做?
答案 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").
查看其内部工作情况