Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Scheme中的列表中消除空列表_List_Scheme - Fatal编程技术网

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)

哇,真不敢相信我错过了。非常感谢你。