0

这是我的代码,它不起作用。

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).

如果我们输入 listL = [1, [2, 3, [4, 5] ] ]结果应该是R = [1, 3, 5].

4

1 回答 1

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].
于 2013-01-17T17:22:24.533 回答