只需几行代码,您就可以解决您的问题:
last([E],E):- !.
last([_|T],E):-
last(T,E).
endsWith(L1,L2):-
last(L1,E),
last(L2,E).
?- endsWith([a,b,c,d,e], [c,d,e]).
true
?- endsWith([a,b,c,d,e], [c,e,d]).
false
首先找到第一个列表的最后一个元素,然后检查它是否等于第二个列表的最后一个元素。如果要检查第一个列表是否以第二个列表结尾,可以使用
reverse/2
以这种方式:
compareLists(_,[]):- !.
compareLists([H|T],[H|T1]):-
compareLists(T,T1).
endsWithAllElements(L1,L2):-
reverse(L1,L1R),
reverse(L2,L2R),
compareLists(L1R,L2R).
?- endsWithAllElements([a,b,c,d,e], [c,e,d]).
false
?- endsWithAllElements([a,b,c,d,e], [c,d,e]).
true
希望有帮助。