【发布时间】:2014-04-08 01:35:22
【问题描述】:
在CLHS 4.3.7 图4.8 中列出了对应于预定义类型说明符的类集。 “关键字”不在其中。但它继续说“可以扩展个别实现以定义其他类型说明符以具有相应的类”。
所以我认为这是 Clozure CL 为“关键字”类型说明符所做的事情,下面的代码似乎证实了这一点。在不这样做的 lisps 中(例如,我检查过的 SBCL 和 LispWorks)获得 Clozure CL 行为的最佳方法是什么?或者做不到这一点,一些可行的妥协?
就像我在下面的方法 foo 的第一个定义中所做的那样,显式测试关键字类型似乎有点恶心,但是如果我的 lisp 实现还没有,我看不到如何将关键字类型变成一个类为我做的...
(in-package :cl-user)
(defmethod foo ((sym symbol))
(let ((type (if (keywordp sym) "keyword" "symbol")))
(format t "symbol specializer with ~A: ~A~%" sym type)))
#+clozure (defmethod foo ((sym keyword))
(format t "We have keyword ~A~%" sym))
;; SBCL
(foo 'bar) => symbol specializer with BAR: symbol
(foo :bar) => symbol specializer with BAR: keyword
;; Clozure CL
(foo 'bar) => symbol specializer with BAR: symbol
(foo :bar) => We have keyword BAR
【问题讨论】:
标签: common-lisp