因此,我想为list编写一个类型说明符,它允许指定列表元素的类型。类似于:
(deftype list-of (v) (cons ,v (or null (list-of ,v))))当然,这是行不通的,因为我们都知道,递归类型是不受支持的。当然,人们可以映射类似于"satisfies“的东西(正如这里提到的:Is it possible to define a recursive type in Common Lisp?),但这否定了适用于语言分析和离线代码分析的干净递归定义的优势。(例如,证明代码是正确的,或者在语言之间进行翻译)。
有什么建议吗?这似乎是一个缺少的标准,除非我遗漏了一些明显的东西,因为我们通常使用列表来表示集合-为什么不用一种简单的方法来声明集合元素的类型呢?
发布于 2018-07-12 00:55:26
抱歉,这是不允许的。DEFTYPE规范说:
作为扩展返回的类型说明符的
递归扩展必须终止,包括嵌套在扩展中的类型说明符的扩展。
这种语言是标准化过程中清理问题的结果。在某些情况下,实现可以允许将递归类型定义作为扩展,但您不能依赖于它。
https://stackoverflow.com/questions/51290394
复制相似问题