LISP でキーワード パラメータを使用できます
(member 'a '(a b c) :test #'eq)
ただし、applyを使用してメンバーメソッドを呼び出そうとしたとき
(apply #'member 'a '(a b c) :test #'eq)
次のようなエラーメッセージがあります。
MEMBER: keyword arguments in (:TEST) should occur pairwise
[Condition of type SYSTEM::SIMPLE-PROGRAM-ERROR]
解決策は
(apply #'member 'a '(a b c) '(:test eq))
キーワード引数がない場合
(apply #'member 'a '((a b c)))
これの背後にあるロジックは何ですか? '(:test #'eq) でエラーが発生するのはなぜですか?
追加した
これが私がこの質問をした理由です。ANSI Common Lispbook page 103 のコードがあります。
(defun our-adjoin (obj lst &rest args)
(if (apply #'member obj lst args)
lst
(cons obj lst)))
私が試し(our-adjoin 'a '(a b c))
たところ、結果は返されました(A B C)
が、エラーが発生するため、 our-adjoin を として変換することはできません( Apply と Lisp のキーワード引数で(apply #'member 'a '(a b c))
求められるように)。
私が考えることができるのは、エラーを発生させない&rest args
ようなものを作るために from の値が与えられているということです。(apply #member 'a '(a b c) '())