-2

因此,如果输入是L=[1,[2,3,4],5],则输出应该是R = [4,5]。常规列表中最后一个元素的代码是

last([X],X].
last([H|T],X):-last(T,X).
4

2 回答 2

0

这不是完全优雅的 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].
于 2013-02-17T05:38:54.337 回答
0

这是彼得答案的略微编辑版本:

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 
于 2018-07-04T08:21:19.660 回答