7

我在 LispWorks Hyper Spec 中找到了一个很好的类型检查示例,但是“类型说明符”链接导致的只是词汇表而不是外延,而且我对语法有点困惑。

(check-type n (integer 0 *) "a positive integer")什么(integer 0 *)意思?我认为这意味着从 0 到无穷大的包含范围,但是是这样吗?

4

1 回答 1

5

是的,您可以在 common lisp 中使用类型说明符,如果您的编译器选择使用它们,它们会非常强大。虽然您可能会发现检查类型的用途,但最常见的类型规范以声明的形式出现。

declare表达式不仅用于类型,而且它有许多声明标识符,并且常见的 lisp 实现实际上可以自由添加自己的。

您感兴趣的是'types',更具体地说是'Type Specifiers'。该页面将为您提供各种指定类型的方法,包括您在问题中提到的方法。

再次注意,您的实现不必使用声明,它可以忽略它们!这是有关此的更多信息。

对于一些示例代码,这是让我了解其工作原理的示例。这里还有更多

4.2.3 类型说明符

如果类型说明符是列表,则列表的 car 是符号,列表的其余部分是辅助类型信息。这样的类型说明符称为复合类型说明符。除非另有明确说明,子项目可以不指定。未指明的子项目用*表示。例如,要完全指定一个向量,元素的类型和向量的长度必须存在。

(vector double-float 100)

以下未指定长度:

(vector double-float *)

以下未指定元素类型:

(vector * 100)
于 2013-08-08T08:12:16.227 回答