уничтожение уровней в списках Prolog

Нужна помощь с написание предикатов на Prolog

Предикат destlev1 для уничтожения уровней в списке. Пример: исходный список [a,[b,[c]]], результирующий список [a,b,c]. Предикат destlev2 для уничтожения уровней в списке. Пример: исходный список [[[a],b],c], результирующий список [a,b,c].


Ответы (1 шт):

Автор решения: Anton Danilov

Достаточно одного предиката destlev/2 для обоих примеров

Вот решение для SWI Prolog:

destlev([], []).
destlev([ X | Xs ], Result):-
    is_list(X)->  
    (   
        destlev(X, Xf),
        destlev( Xs, Xfs ),
        append(Xf, Xfs, Result)
    )
    ;
    ( 
        destlev( Xs, Xfs ),   
        Result = [X | Xfs]
    ).
   
→ Ссылка