2014-04-08 59 views
0

我試圖做一個函數來附加一個列表與單個項目。它正在做的是返回一個點對。計劃,你如何追加一個列表與單個項目?

(define (append lst x) 
    (cond 
    ((null? lst) x) 
    (else (cons (car lst) (append (cdr lst) x))))) 

我得到的輸出是

> (append '(1 2 3 4 5 6 7) 8) 
(1 2 3 4 5 6 7 . 8) 

我試圖讓

(1 2 3 4 5 6 7 8) 

感謝。

回答

2

試試這個:

(define (append lst x) 
    (cond 
    ((null? lst) (cons x '())) ; here's the change 
    (else (cons (car lst) (append (cdr lst) x))))) 

請注意,所有適當的名單必須在空列表結束,否則它會發生,你剛剛經歷了什麼。把它用另一種方式:

(cons 1 (cons 2 3)) 
=> '(1 2 . 3) ; an improper list 

(cons 1 (cons 2 (cons 3 '()))) 
=> '(1 2 3) ; a proper list 
+0

+1打我5秒:) – Pedrom

1

如果你被允許使用append沒有理由爲什麼不呢?由於append是O(n),因此它與您嘗試的幾乎相同,其中n是第一個列表中元素的數量。這只是更少的代碼。

;; append element to last 
(define (append-elt lst x) 
    (append lst (list x))) 
+1

可能不準 - 這可能是CS的功課,其中一點是要了解如何實現追加(可能需要使用DrScheme/DrRacket子語言沒有定義追加)。 –

+0

@AndrewMedico我有一種感覺是不允許的,但我認爲它屬於這個問題的答案。 – Sylwester

+0

我見過這個'snoc',也就是'cons'反轉。 [至於功課,如果有人不問他們的問題,堅韌的豆子。你的回答很好。] –

相關問題