2016-05-05 23 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)