深度列表的难度

时间:2013-01-17 16:22:08

标签: prolog

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

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

1 个答案:

答案 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].