3

Common Lisp で、特殊化する引数がキーワード引数であるジェネリック関数を作成する方法はありますか?

たとえば、これではなく:

CL-USER> (defgeneric tst (a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst ((a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>

..引数 'a' を指定します。私は次のことを望みます:

CL-USER> (defgeneric tst (&key a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst (&key (a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>

明らかに、これはキーワード引数のデフォルト値を設定するための構文と衝突するので、私は少し立ち往生しています。実際のコードでは、この問題は関連しています。別の引数レイアウトを選択したので、これは問題ではありませんでした (起動するのが少し整頓されていました!)。

乾杯

4

2 に答える 2

6

いいえ、それは Common Lisp によって提供されていません。

于 2012-10-04T17:29:01.083 に答える
1

直接サポートされていませんが、ジェネリック関数にディスパッチすることで同じ効果を得ることができます。

(defgeneric foo-impl (bar baz))

(defun foo (&key bar baz)
  (foo-impl bar baz))
于 2012-10-06T18:12:32.080 に答える