2016-05-05 26 views
2

我有一個列表,其中有一些是空列表。我的函數正在通過主列表並檢查是否有任何空列表。如果是空的,它將消除(或應該)。我不斷收到一輛車:違反合同的錯誤,告訴我它期待一雙,但得到'()。我不知道如何將其更改爲不會出現此錯誤。消除計劃中的列表中的空列表

 (define (take-out-nulls alist) 
     (cond ((null? (car alist)) (take-out-nulls (cdr alist))) 
     (#t (cons (car alist)(take-out-nulls (cdr alist)))))) 

回答

3

你有沒有遞歸終止測試,這是你的功能繼續即使在它結束索要alistcar

只要這樣的測試添加到函數:

(define (take-out-nulls alist) 
    (cond ((null? alist) '()) 
     ((null? (car alist)) (take-out-nulls (cdr alist))) 
     (#t (cons (car alist) (take-out-nulls (cdr alist)))))) 

(take-out-nulls '(a()() b c())) ; => (a b c) 
+0

哇,我真不敢相信我錯過了。非常感謝。 – Leena

0

你也可以使用

(define (take-out-nulls alist) 
    (filter (λ (x) (not (empty? x))) alist)) 

(take-out-nulls '(a()() b c())) ;=> (a b c)