Привет, я пытаюсь написать предикат, который сортирует первый список от низкого к высокому и второй список от высокого к низкому, а затем помещает заголовки каждого списка в новый список.
Prolog — предикат для сортировки и слияния списка
Ответы (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
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