สวัสดี ฉันกำลังพยายามเขียนภาคแสดงที่เรียงลำดับรายการแรกจากต่ำไปสูงและรายการที่สองจากสูงไปต่ำ จากนั้นนำส่วนหัวของแต่ละรายการไปไว้ในรายการใหม่
คำนำ - เพรดิเคตเพื่อเรียงลำดับและรวมรายการ
คำตอบ (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