List 在Scheme中的列表中消除空列表
我有一个充满列表的列表,其中一些是空的。我的功能是浏览主列表并检查是否有空列表。如果为空,则会消除(或应该消除)。我一直在买一辆车:违反合同的错误告诉我它期待一辆车,但得到一辆'()。我不知道如何更改它以避免出现此错误List 在Scheme中的列表中消除空列表,list,scheme,List,Scheme,我有一个充满列表的列表,其中一些是空的。我的功能是浏览主列表并检查是否有空列表。如果为空,则会消除(或应该消除)。我一直在买一辆车:违反合同的错误告诉我它期待一辆车,但得到一辆'()。我不知道如何更改它以避免出现此错误 (define (take-out-nulls alist) (cond ((null? (car alist)) (take-out-nulls (cdr alist))) (#t (cons (car alist)(take-o
(define (take-out-nulls alist)
(cond ((null? (car alist)) (take-out-nulls (cdr alist)))
(#t (cons (car alist)(take-out-nulls (cdr alist))))))
您有一个没有终止测试的递归,即您的函数继续请求
alist
的car
,即使在它结束时也是如此
只需将此类测试添加到函数中:
(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)
你也可以使用
(define (take-out-nulls alist)
(filter (λ (x) (not (empty? x))) alist))
(take-out-nulls '(a () () b c ())) ;=> (a b c)
哇,真不敢相信我错过了。非常感谢你。