我無法將列表附加到另一個列表。以下是我的代碼。當我跑步時(追加'(1 2)'(3 4))我得到'(1 3 2 4)。計劃附加程序
我想要的輸出是「(1 2 3 4)
(define (append l m)
(if (null? l) '()
(cons (car l) (append m (cdr l)))))
由於
我無法將列表附加到另一個列表。以下是我的代碼。當我跑步時(追加'(1 2)'(3 4))我得到'(1 3 2 4)。計劃附加程序
我想要的輸出是「(1 2 3 4)
(define (append l m)
(if (null? l) '()
(cons (car l) (append m (cdr l)))))
由於
井通過圍繞切換兩個列表那樣的(呼叫附加遞歸當開關的M和L的位置),您將獲得第一個列表中的第一個項目,然後是第二個列表中的第一個項目等。
如果您不想要那樣,則應將l作爲第一個參數,並將m
作爲第二個參數。所以,你得到:
(define (append l m)
(if (null? l) '()
(cons (car l) (append (cdr l) m))))
當然化爲或者想這是行不通的,因爲現在你只得到第一個列表後面,並沒有什麼都追加。你需要做的是,一旦第一個列表完全追加(即一旦l
是空的),你需要返回第二個同樣的尾巴,像這樣:
(define (append l m)
(if (null? l) m
(cons (car l) (append (cdr l) m))))
我碰到這個而來到學習自己。 @ sepp2k的答案是一條很好的指導OP的指令,用於糾正他們的代碼以實現append的遞歸定義。下面是my-append
使用高階函數foldr
:
(define (myappend xs ys)
(foldr cons ys xs))
的另一個定義哇。在我原來的代碼中,我讓它返回,這更糟,因爲它包含了所有內容。非常感謝。 – 2010-12-05 00:04:13