問題はキーワードの使用ではなく、実際にはキーワードの実装についてです。たとえば、キーワード パラメーターを使用して関数を作成し、呼び出しを行うと、次のようになります。
(defun fun (&key key-param) (print key-param)) => FUN
(find-symbol "KEY-PARAM" 'keyword) => NIL, NIL ;;keyword is not still registered
(fun :key-param 1) => 1
(find-symbol "KEY-PARAM" 'keyword) => :KEY-PARAM, :EXTERNAL
引数を渡すためにキーワードをどのように使用しますか? キーワードは、それ自体が値であるシンボルです。では、キーワードを使用して対応するパラメーターをバインドするにはどうすればよいでしょうか?
キーワードに関する別の質問 — キーワードはパッケージを定義するために使用されます。既存のキーワードで名前を付けたパッケージを定義できます。
(defpackage :KEY-PARAM) => #<The KEY-PARAMETER package, 0/16 ...
(in-package :KEY-PARAM) => #<The KEY-PARAMETER package, 0/16 ...
(defun fun (&key key-param) (print key-param)) => FUN
(fun :KEY-PARAM 1) => 1
:KEY-PARAM
システムは、パッケージ名と関数パラメーター名の使用をどのように区別しますか? また、関数を定義KEY-PARAM
してエクスポートすると、より複雑なものを作成できます (実際には関数ではなく名前です)。
(in-package :KEY-PARAM)
(defun KEY-PARAM (&key KEY-PARAM) KEY-PARAM) => KEY-PARAM
(defpackage :KEY-PARAM (:export :KEY-PARAM))
;;exporting function KEY-PARAM, :KEY-PARAM keyword is used for it
(in-package :CL-USER) => #<The COMMON-LISP-USER package, ...
(KEY-PARAM:KEY-PARAM :KEY-PARAM 1) => 1
;;calling a function KEY-PARAM from :KEY-PARAM package with :KEY-PARAM parameter...
質問は同じです。Common Lisp は:KEY-PARAM
ここでキーワードの使用法をどのように区別しますか?
Common Lisp のキーワードについて、メカニズムの説明が記載されたマニュアルがあれば、ここにリンクを貼っていただければ幸いです。キーワードの使用法だけを扱った短い記事しか見つからないからです。