【发布时间】:2012-12-11 06:44:34
【问题描述】:
问题不在于使用关键字,而实际上是关键字实现。例如,当我使用关键字参数创建一些函数并进行调用时:
(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 中关键字的手册并解释了它们的机制,如果您在此处发布链接,我将不胜感激,因为我只能找到一些仅关于关键字用法的短文。
【问题讨论】:
标签: lisp common-lisp