我在 LispWorks Hyper Spec 中找到了一个很好的类型检查示例,但是“类型说明符”链接导致的只是词汇表而不是外延,而且我对语法有点困惑。
在(check-type n (integer 0 *) "a positive integer")
什么(integer 0 *)
意思?我认为这意味着从 0 到无穷大的包含范围,但是是这样吗?
我在 LispWorks Hyper Spec 中找到了一个很好的类型检查示例,但是“类型说明符”链接导致的只是词汇表而不是外延,而且我对语法有点困惑。
在(check-type n (integer 0 *) "a positive integer")
什么(integer 0 *)
意思?我认为这意味着从 0 到无穷大的包含范围,但是是这样吗?
是的,您可以在 common lisp 中使用类型说明符,如果您的编译器选择使用它们,它们会非常强大。虽然您可能会发现检查类型的用途,但最常见的类型规范以声明的形式出现。
declare表达式不仅用于类型,而且它有许多声明标识符,并且常见的 lisp 实现实际上可以自由添加自己的。
您感兴趣的是'types',更具体地说是'Type Specifiers'。该页面将为您提供各种指定类型的方法,包括您在问题中提到的方法。
再次注意,您的实现不必使用声明,它可以忽略它们!这是有关此的更多信息。
对于一些示例代码,这是让我了解其工作原理的示例。这里还有更多。
如果类型说明符是列表,则列表的 car 是符号,列表的其余部分是辅助类型信息。这样的类型说明符称为复合类型说明符。除非另有明确说明,子项目可以不指定。未指明的子项目用*表示。例如,要完全指定一个向量,元素的类型和向量的长度必须存在。
(vector double-float 100)
以下未指定长度:
(vector double-float *)
以下未指定元素类型:
(vector * 100)