因此,如果输入是L=[1,[2,3,4],5],则输出应该是R = [4,5]。常规列表中最后一个元素的代码是
last([X],X].
last([H|T],X):-last(T,X).
因此,如果输入是L=[1,[2,3,4],5],则输出应该是R = [4,5]。常规列表中最后一个元素的代码是
last([X],X].
last([H|T],X):-last(T,X).
这不是完全优雅的 Prolog,但我认为它会做你想要的:
deeplast([L], X) :-
deeplast(L, X).
deeplast([X], X) :-
atomic(X).
deeplast([H|T], X) :-
atomic(H),
deeplast(T, X).
deeplast([H|T], X) :-
compound(H),
deeplast(H, Y),
deeplast(T, Z),
X = [Y, Z].
这是彼得答案的略微编辑版本:
deeplast([L], X) :-
deeplast(L, X).
deeplast([X], X) :-
atomic(X).
deeplast([H|T], X) :-
atomic(H),
deeplast(T, X).
deeplast([H|T], X) :-
deeplast(H, Y),
deeplast(T, Z),
X = Z.
?- deeplast([1,[2,3],4,[5,[6,8]]],R).
R = 8