Common lisp 做类型说明符的坏处是:number
Common lisp 做类型说明符的坏处是:number,common-lisp,type-declaration,Common Lisp,Type Declaration,number是类型说明符: 但是,我不能将它与declaim一起使用: (defparameter *foo* 0) (declaim (type (number) *FOO*)) => (typep*FOO*”编号)是T 所以我必须使用(或整数浮点) 我错过了什么 谢谢 SBCL1.4.5 是一个 , (数字)不可用 请使用 (声明(类型编号*FOO*)) 相反 PS1。我建议您使用CLHS而不是CLtL2作为参考。 前者基于官方ANSI CL标准,而后者则已过时 PS2。请注意,numb
number
是类型说明符:
但是,我不能将它与declaim
一起使用:
(defparameter *foo* 0)
(declaim (type (number) *FOO*))
=>
(typep*FOO*”编号)
是T
所以我必须使用(或整数浮点)
我错过了什么
谢谢
SBCL1.4.5
是一个
,
(数字)
不可用
请使用
(声明(类型编号*FOO*))
相反
PS1。我建议您使用CLHS而不是CLtL2作为参考。
前者基于官方ANSI CL标准,而后者则已过时
PS2。请注意,
number
是(或实复数)
,而不是(或整数浮点)
CLtL2对于公共Lisp不具有权威性。CLtL2描述了ANSI标准化之前的语言
使用通用Lisp HyperSpec,它源自ANSI CL标准:
这是一个很好的例子
类型说明符可以写为带有辅助类型信息的列表,称为复合类型说明符,有些是仅复合类型说明符
词汇表上说:
原子类型说明符n。原子类型的类型说明符。对于每个原子类型说明符x,都有一个没有提供参数的等效复合类型说明符(x)
这表示(number)
是有效的类型说明符。一些实现接受它:LispWorks、ABCL、GCL等
由于术语表是标准的一部分,这可能是SBCL、CLISP、Clozure CL等中的错误和/或遗漏
那么使用类型说明符是合法的:
(declaim (type number *FOO*))
(declaim (type (number) *FOO*))
(typep *FOO* 'number)
(typep *FOO* '(number))
错误报告的答案:这是一个错误:
(typep 3'(number))
@Ehvince:但ANSI CL标准明确表示这不是一个错误。@Ehvince:标准说这不是Rainer所说的错误。因此,如果SBCL不接受,则SBCL不符合标准。
(declaim (type number *FOO*))
(declaim (type (number) *FOO*))
(typep *FOO* 'number)
(typep *FOO* '(number))