2013-03-11 55 views
-3

請幫助我在計劃中的代碼基本上我需要的是如下 函數(追加)需要一個原子和一個列表,並將元素添加到列表的末尾。指導與計劃

實施例:

(append 'A '(B C D)) -> (B C D A) 

回答

2

遞歸的方法是:

(define (append atom lst) 
    (if (empty? lst) 
     (list atom) 
     (cons (car lst) (append atom (cdr lst))))) 

用法:

> (append 'A '(B C D)) 
'(B C D A) 

這相當於

> (cons 'B (cons 'C (cons 'D (list 'A)))) 
'(B C D A) 
+0

也許是最好不要使用標準的叫法。這被廣泛地稱爲「snoc」操作('cons'的反轉*)。 – 2013-03-11 14:10:13

+0

我完全同意,但我試圖堅持他的問題/例子,以便他能理解我的答案。 – uselpa 2013-03-11 14:12:16

+1

這個問題看起來像一個家庭作業和庸醫,就像一個家庭作業,請不要勺子餵給OP的答案,如果你向他/她解釋如何通過他自己的方式解決它,而不是給一個直回答 – 2013-03-11 14:34:34

0

您可以添加到列表這樣的結尾:

(append '(B C D) (list 'A))) 

Append需要一個list參數作爲第一個參數。第二個參數並不一定是一個列表,但它會顯示爲(B C D . A)如果你(append '(B C D) 'A))

My Example

+1

我想他需要定義過程追加,而不是使用內置的一個。 – uselpa 2013-03-11 13:50:37

+0

@uselpa可能是這種情況。由於在示例中append的使用不正確,所以我發佈了它。 – 2013-03-11 13:53:18

+1

這就是爲什麼我相信他不應該使用內置程序。 – uselpa 2013-03-11 13:55:42