2

リストのリストがあり、空のリストをすべて削除したいと考えています。

私のリストは(("O") ("O") ())です。

私が行った場合

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

適切な出力が得られます(("O") ("O"))

しかし、remove*(ドキュメントからすべての出現を削除します)を使用すると、同じ入力リストが得られます。

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

私に返してくれます

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

私は何を間違っていますか?

4

1 に答える 1

6

まずremove*、Scheme (R5RS、R6RS、R7RS) には存在しません。removeR6RSに存在し、あなたが望むことをします:

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

スキームの方言ラケットでは、ラケットとラケットの両方がremoveありremove*、説明している方法で機能するため、ラケットを使用しているようです。 remove*削除するアイテムのリストを取ります。したがって(remove '() lst)、 in#!R6RSは in と同じ(remove* '(()) lst)です#!racketremove*一致する要素をすべて削除するように作られているようです:

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