了解Common Lisp中的类型说明符

时间:2013-08-08 07:42:26

标签: common-lisp typechecking

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

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

1 个答案:

答案 0 :(得分:4)

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

declare表达式不仅用于类型,而且它具有多个declaration identifiers,并且常见的lisp实现实际上可以自由添加它们。

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

再次注意,您的实现不必使用它可以忽略它们的声明! Here is some more info on that.

对于一些示例代码,这是让我理解其工作原理的示例。 Here以及更多here

来自4.2.3 Type Specifiers

  

如果类型说明符是列表,则列表中的汽车是符号,并且   列表的其余部分是辅助类型信息。这种类型   说明符称为复合类型说明符。除非明确说明   另有说明,附属项目可能未指明。该   未指明的附属项目以书面*表示。例如,   完全指定一个向量,元素的类型和   必须存在向量的长度。

(vector double-float 100)
     

以下留下未指定的长度:

(vector double-float *)
     

以下是未指定的元素类型:

(vector * 100)