ฉันกำลังยุ่งอยู่กับ โครงสร้างและการตีความของ แบบฝึกหัดโปรแกรมคอมพิวเตอร์ 2.18 ที่นี่เราต้องกำหนดขั้นตอนย้อนกลับเพื่อย้อนกลับรายการ ควรทำดังต่อไปนี้:
(reverse (list 1 4 9 16 25))
;; => (25 16 9 4 1)
ฉันได้คำจำกัดความต่อไปนี้:
(define (reverse list)
(if (null? list)
list
(cons (reverse (cdr list)) (car list))))
;; => (mcons (mcons (mcons (mcons (mcons '() 25) 16) 9) 4) 1).
จากนั้นใน วิธีแก้ปัญหา พบสิ่งที่คล้ายกันดังนี้:
(define (reverse items)
(if (null? (cdr items))
items
(append (reverse (cdr items))
(cons (car items) nil))))
;; => (mcons 25 (mcons 16 (mcons 9 (mcons 4 (mcons 1 '()))))).
มีความแตกต่างระหว่าง append
และ cons
ที่นี่ซึ่งฉันไม่สามารถวางนิ้วได้
คำถามของฉัน: อะไรคือความแตกต่างและเหตุใดผลลัพธ์จึงไม่แสดงเป็น (25 16 9 4 1)