这是我的代码,它不起作用。
skip([], []).
skip([H|T], [H|R]):-
atomic(H),
!,
skip(T, R).
skip([_|T], R):-
skip(T, R).
tails([], []).
tails([H|T], R]):-
atomic(H),
!,
skip(T, T1),
tails(T1, R).
tails([H|T], [H|R]):-
tails(H, R1),
skip(T, T1),
tails(T1, R2),
append(R1, R2, R).
如果我们输入列表L = [1, [2, 3, [4, 5] ] ]
,则结果应为R = [1, 3, 5].
答案 0 :(得分:1)
不确定我理解您的要求,但此代码符合您的样本。
tails([], []).
tails([E], [E]) :-
atomic(E), !.
tails([E,[H|T]|Es], [E|Rs]) :-
atomic(E), !,
tails([H|T], Qs),
tails(Es, Ts),
append(Qs, Ts, Rs).
tails([_|Es], Rs) :-
tails(Es, Rs).
试验:
?- tails([1,[2,3,[4,5]]],L).
L = [1, 3, 5].