我有一个列表列表,我想从中删除所有空列表。
我的清单是(("O") ("O") ())
。
如果我这样做
(remove '() '(("O") ("O") ()))
我得到了正确的输出(("O") ("O"))
但是使用 remove*
(从文档中删除所有出现),我得到相同的输入列表,即:
(remove* '() '(("O") ("O") ()))
还给我
(("O") ("O") ())
我做错了什么?
首先,remove*
在 Scheme (R5RS, R6RS, R7RS) 中不存在。 remove
确实存在于 R6RS 中,并且可以执行您想要的操作:
#!r6rs
(import (rnrs))
(remove '() '(() (1) (2) () ())) ;==> ((1) (2))
在方言球拍方案中,您既有remove
又有remove*
,似乎您正在使用球拍,因为它确实以您所描述的方式工作。 remove*
获取要删除的项目列表。因此,#!R6RS
中的(remove '() lst)
与#!racket
中的(remove* '(()) lst)
相同。 remove*
似乎是为了删除所有匹配的元素:
(remove* '(() (2)) '(() (1) (2) () ())) ; ==> ((1))