我有一个列表,其中列出了一些列表,其中一些列表为空。我的功能是通过主列表并检查是否有空列表。如果为空,则消除它们(或应该)。我一直在买车:合同违规错误告诉我它期待一对但是得到一个'()。我不知道如何更改它以避免出现此错误。
(define (take-out-nulls alist)
(cond ((null? (car alist)) (take-out-nulls (cdr alist)))
(#t (cons (car alist)(take-out-nulls (cdr alist))))))
答案 0 :(得分:3)
你有一个没有终止测试的递归,即使在最后,你的函数继续要求car
alist
。
只需将此类测试添加到该功能中:
(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)
答案 1 :(得分:0)
您也可以使用
(define (take-out-nulls alist)
(filter (λ (x) (not (empty? x))) alist))
(take-out-nulls '(a () () b c ())) ;=> (a b c)