2

我有一个列表列表,我想从中删除所有空列表。

我的清单是(("O") ("O") ())

如果我做

(remove '() '(("O") ("O") ()))

我得到正确的输出(("O") ("O"))

但是remove*(从文档中删除所有出现)我得到相同的输入列表,即:

(remove* '() '(("O") ("O") ())) 

还给我

(("O") ("O") ())

我究竟做错了什么?

4

1 回答 1

6

首先,remove*Scheme 中不存在(R5RS、R6RS、R7RS)。remove确实存在于 R6RS 中并执行您想要的操作:

#!r6rs
(import (rnrs))
(remove '() '(() (1) (2) () ())) ;==> ((1) (2))

在方案方言 Racket 中,您同时拥有remove并且remove*似乎您正在使用球拍,因为它确实按照您描述的方式工作。 remove*获取要删除的项目列表。因此(remove '() lst)in与in#!R6RS相同。似乎要删除所有匹配的元素:(remove* '(()) lst)#!racketremove*

(remove* '(() (2)) '(() (1) (2) () ())) ; ==> ((1))
于 2013-12-18T11:49:20.347 回答