I have this predicate and this works.
last(X,[Y|X]).
last(X,[Y|Z]) :- last(X,Z).
But I also want to do it with my list_merge predicate.
list_merge([], X, X).
list_merge([X | L1], L2, [X | L3]) :-
list_merge(L1, L2, L3).
How can I combine them?
CodePudding user response:
X
is the last part of Y
if there is something you can merge with X
to get Y
:
last(X,Y) :- list_merge( _, X, Y ).
CodePudding user response:
This is a better version of last
, using [Head|Tail]
notation with first-argument indexing, to prevent an unwanted choicepoint:
last_elem([H|T], Elem) :-
last_elem_(T, H, Elem).
last_elem_([], Elem, Elem).
last_elem_([H|T], _, Elem) :-
last_elem_(T, H, Elem).
Result:
?- last_elem([1,2,3], E).
E = 3.