คำนำ - เพรดิเคตเพื่อเรียงลำดับและรวมรายการ

สวัสดี ฉันกำลังพยายามเขียนภาคแสดงที่เรียงลำดับรายการแรกจากต่ำไปสูงและรายการที่สองจากสูงไปต่ำ จากนั้นนำส่วนหัวของแต่ละรายการไปไว้ในรายการใหม่


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