Prolog - predikat untuk mengurutkan dan menggabungkan daftar

Hai, saya mencoba menulis predikat yang mengurutkan daftar pertama dari rendah ke tinggi dan daftar kedua dari tinggi ke rendah, kemudian memasukkan kepala setiap daftar ke dalam daftar baru.


person user7686748    schedule 07.12.2017    source sumber
comment
mix([], [], X) mengatakan jika Anda mencampur daftar kosong ([]) dengan daftar kosong ([]) Anda mendapatkan apa pun yang Anda inginkan (X). Kelihatannya tidak logis, bukan? mix([], X, X) sepertinya logis. Seperti halnya, mix(X, [], X) yang tidak Anda miliki. mix([H1|T1], [H2|T2], [H1|X]) :- mix(T1, T2, [H2|X]). Menurutku hanya perlu mix([H1|T1], [H2|T2], [H1,H2|T]) :- mix(T1, T2, T) kan? Nama umum untuk ini adalah zip, bukan mix.   -  person lurker    schedule 07.12.2017


Jawaban (1)


Berikut kode untuk predikat 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).

Yang ini juga berfungsi dengan daftar input dengan panjang berbeda.

person damianodamiano    schedule 07.12.2017