Prolog — предикат для сортировки и слияния списка

Привет, я пытаюсь написать предикат, который сортирует первый список от низкого к высокому и второй список от высокого к низкому, а затем помещает заголовки каждого списка в новый список.


person user7686748    schedule 07.12.2017    source источник
comment
mix([], [], X) говорит, что если вы смешаете пустой список ([]) с пустым списком ([]), вы получите все, что захотите (X). Это не кажется логичным, не так ли? mix([], X, X) кажется логичным. Как и mix(X, [], X) которого у вас нет. mix([H1|T1], [H2|T2], [H1|X]) :- mix(T1, T2, [H2|X]). Я думаю, просто должно быть mix([H1|T1], [H2|T2], [H1,H2|T]) :- mix(T1, T2, T) правильно? Обычное имя для этого zip, а не mix.   -  person lurker    schedule 07.12.2017


Ответы (1)


Вот код для предиката mix/3:

mix([],[],[]).
mix([],[H1|T1],[H1|T2]):-
    mix([],T1,T2).
mix([H1|T1],[],[H1|T2]):-
    mix(T1,[],T2).
mix([H1|T1],[H2|T2],[H1,H2|T3]) :-
   mix(T1,T2,T3).

Этот также работает со списком ввода разной длины.

person damianodamiano    schedule 07.12.2017