有没有办法测试任意列表是否对称?
例如:
?- symmetric([a,b,b,a]).
true.
?- symmetric([a,b,c,a]).
false.
?- symmetric([a,a]).
true.
我的尝试是将第一个元素与最后一个元素进行比较,如果它们相等,则删除它们并继续处理列表的其余部分;否则失败。如果列表有 2 个元素并且它们相等,则成功。否则失败。
然而,使用这个谓词“找到”列表的结尾并不是真正的高效:
last(L,[L]).
last(L,[H|T]):-last(L,T).
有谁知道这样做的好方法?任何帮助将不胜感激!
顺便说一句:我不关心元素数量不均的列表。