如何在`declare`中扩展一个类型说明符?

时间:2013-09-10 13:52:45

标签: macros common-lisp

我正在使用Common Lisp,我有多个函数使用相同类型的数据,我使用declare来指定符号类型:

(defun foo (x)
  (declare (type single-float x))
  ...)

(defun bar (x y)
  (declare (type single-float x y))
  ...)

现在我想将single-float存储到自定义符号changable-float中,以便我可以轻松更改这些功能的所有类型(例如,从single-floatdouble-float )。我试过这些代码,但它不起作用:

(defvar changeable-float 'single-float)

(defun foo (x)
  (declare (type changeable-float x))
  ...)

(defun bar (x y)
  (declare (type changeable-float x y))
  ...)

我该如何实现这个想法?

1 个答案:

答案 0 :(得分:5)

使用DEFTYPE定义类型。

CL-USER 41 > (deftype foo () 'integer)
FOO

CL-USER 42 > (typep 3 'foo)
T

CL-USER 43 > (typep "33" 'foo)
NIL