gpt4 book ai didi

common-lisp - 成为类型说明符的坏事 : number

转载 作者:行者123 更新时间:2023-12-01 07:50:08 25 4
gpt4 key购买 nike

number是类型说明符:CLtl2 4.1 Type Specifier Symbols

但是,我不能将它与 declaim 一起使用:

(defparameter *foo* 0)
(declaim (type (number) *FOO*))

=>
bad thing to be a type specifier: (NUMBER)
[Condition of type SIMPLE-ERROR]
(typep *FOO* 'number)是 T。

所以我必须使用 (or integer float) ?

我错过了什么?

谢谢

SBCL1.4.5

最佳答案

CLtL2 不是 Common Lisp 的权威。 CLtL2 描述了 ANSI 标准化之前的语言。

使用源自 ANSI CL 标准的 Common Lisp HyperSpec:CLHS 4.2.3 Type Specifiers .

NUMBERatomic type specifier .

可以写成列表的类型说明符 附属类型信息称为复合类型说明符,有些是仅复合类型说明符。

词汇表说:

atomic type specifier n. a type specifier that is atomic. For every atomic type specifier, x, there is an equivalent compound type specifier with no arguments supplied, (x).



这表明 (number)是有效的类型说明符。一些实现接受它:LispWorks、ABCL、GCL、...

由于词汇表是标准的一部分,这可能是 SBCL、CLISP、Clozure CL 中的错误和/或遗漏……

那么类型说明符的这种用法是合法的:
(declaim (type number *FOO*))
(declaim (type (number) *FOO*))

(typep *FOO* 'number)
(typep *FOO* '(number))

关于common-lisp - 成为类型说明符的坏事 : number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58715076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com