Chr*_*ris -1 symmetric list prolog
有没有办法测试任意列表是否对称?
例如:
?- symmetric([a,b,b,a]).
true.
?- symmetric([a,b,c,a]).
false.
?- symmetric([a,a]).
true.
Run Code Online (Sandbox Code Playgroud)
我的尝试是将第一个元素与最后一个元素进行比较,如果它们相等则删除它们并继续执行列表的其余部分; 否则失败.如果列表有2个元素且它们相等,则成功.否则失败.
但是,使用此谓词"查找"列表的结尾并不是真正的高效:
last(L,[L]).
last(L,[H|T]):-last(L,T).
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的好方法?真的很感激任何帮助!
顺便说一句:我不关心元素数量不均的列表.
我找到了问题的答案.
对称列表是回文(有时你看不到看到森林的树木)......而这个简单的谓词测试:
is_palindrome(L) :- reverse(L,L).
Run Code Online (Sandbox Code Playgroud)