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