Common lisp 公共Lisp递归类型说明符

Common lisp 公共Lisp递归类型说明符,common-lisp,Common Lisp,所以我想为list编写一个类型说明符,它允许我们指定list元素的类型。比如: (deftype list-of (v) (cons ,v (or null (list-of ,v)))) 但当然,这是行不通的,因为我们都知道,递归类型不受支持。当然,可以映射“满足”之类的内容(这里已经提到:),但这种映射否定了适合于语言分析和离线代码分析的干净递归定义的优势。(例如,证明代码正确,或在语言之间进行翻译) 有什么建议吗?这似乎是标准中缺少的一点,除非我缺少一些明显的东西,因为我们通常使用列表来

所以我想为list编写一个类型说明符,它允许我们指定list元素的类型。比如:

(deftype list-of (v) (cons ,v (or null (list-of ,v))))
但当然,这是行不通的,因为我们都知道,递归类型不受支持。当然,可以映射“满足”之类的内容(这里已经提到:),但这种映射否定了适合于语言分析和离线代码分析的干净递归定义的优势。(例如,证明代码正确,或在语言之间进行翻译)


有什么建议吗?这似乎是标准中缺少的一点,除非我缺少一些明显的东西,因为我们通常使用列表来表示集合-为什么不使用一种简单的方法来声明集合元素的类型?

抱歉,这是不允许的。说明书上说:

作为扩展必须终止而返回的类型说明符的递归扩展,包括嵌套在扩展中的类型说明符的扩展


这种语言是标准化过程中清理问题的结果。在某些情况下,实现可以允许递归类型定义作为扩展,但您不能以可移植的方式依赖它。

List只适用于小集合。对较大的集合使用哈希表以提高速度。类型说明符的主要用途是用于优化或操作,如
CHECK-type
TYPECASE
。使用
满足
对后者有好处。像这样的递归类型定义可能对优化没有多大帮助。如果你想做其他的代码分析,你可以自由地提出你自己的注释系统。是的,很遗憾,这是真的。所以我猜你是在建议实现我自己的类型系统?请参阅,了解如何使用
来实现它。