なぜこれが私に説明できますか:
(remove-if #'(lambda (var) (member var (list "x"))) (list "x" "y" "z"))
これを返します:
("x" "y" "z")
でもこれは:
(remove-if #'(lambda (var) (member var (list 1))) (list 1 2 4))
これを返します:
(2 4)
?
なぜこれが私に説明できますか:
(remove-if #'(lambda (var) (member var (list "x"))) (list "x" "y" "z"))
これを返します:
("x" "y" "z")
でもこれは:
(remove-if #'(lambda (var) (member var (list 1))) (list 1 2 4))
これを返します:
(2 4)
?
:test #'equal
に渡すmember
:
(remove-if #'(lambda (var) (member var (list "x") :test #'equal)) (list "x" "y" "z"))
==> ("y" "z")
ご了承ください
(eql "x" "x")
==> NIL
(equal "x" "x")
==> T
(eql 1 1)
==> T
Common Lispのデフォルトの1 引数テストは ですeql
。
これは、ANSI CL 標準で提供されている 4(!) 個の汎用比較関数の中から最も合理的な選択です。
eq
実装に依存しすぎて、おそらく数字や文字で望むようには機能しませんequal
オブジェクトをequalp
トラバースするため、巨大なオブジェクトの場合は時間がかかり、円形のオブジェクトの場合は終了しない場合があります。Common Lispの、、、の違いeq
eql
equal
equalp
も参照してください。
+set-difference
の代わりに使用します。remove-if
member