Types 在沈从文中可以做依赖类型吗?

Types 在沈从文中可以做依赖类型吗?,types,lisp,dependent-type,shen,Types,Lisp,Dependent Type,Shen,我们看到了依赖类型的好处: 依赖类型是依赖于其他类型的元素的类型。一个例子是长度为n且分量为A的向量的类型An。另一个例子是m n-矩阵的类型Amn。我们说类型An依赖于数字n,或者说An是由数字n索引的一系列类型 我们还看到了以下好处: 如果列表中只有一个元素,则会出现类型错误,因此上面代码段中的第二行不应编译 该系统具有先进的类型系统 这里的评论员将沈从文描述为 在这里: 但是,您可以在Shen中以不会产生问题的方式使用依赖类型 我的问题是:在《沈》中是否可以做依赖类型?事实上,看看《沈》作

我们看到了依赖类型的好处:

依赖类型是依赖于其他类型的元素的类型。一个例子是长度为n且分量为A的向量的类型An。另一个例子是m n-矩阵的类型Amn。我们说类型An依赖于数字n,或者说An是由数字n索引的一系列类型

我们还看到了以下好处:

如果列表中只有一个元素,则会出现类型错误,因此上面代码段中的第二行不应编译

该系统具有先进的类型系统

这里的评论员将沈从文描述为

在这里:

但是,您可以在Shen中以不会产生问题的方式使用依赖类型


我的问题是:在《沈》中是否可以做依赖类型?

事实上,看看《沈》作者本身的解释:

“Qi确实包括处理依赖类型的设施……类型符号实际上是图灵等价物……Shen有一个重要的创新,在Qi II中没有发现,那就是能够使用类型安全策略扩展驻留类型检查器…”

来自Shen OS内核手册的Shen中的依赖类型

(datatype my-prover-types

  P : Type;
  _______________________
  (myprog Type X) : Type;)
type#my-prover-types

(define myprog
  Type P -> P)

(myprover symbol p)
p : symbol

(myprog number p)
type error

下面是在类型检查器中定义任意转换的示例。 meta.uncon将[cons a[cons b[]]映射到[a b]

(0-) (datatype meta.uncons

            (meta.uncons X X*);
            (meta.uncons Y Y*);
  _____________________________________
       (meta.uncons [X|Y] (X*|Y*));

  _____________________________________
            (meta.uncons X X); )

type#meta.uncons

(1-) (prolog? (shen.t* [meta.uncons [cons a [cons b [cons c []]]] Z] [])
              (return Z))

[a b c]

这句话似乎暗示了这一点?我猜你想要的是更具体的东西,但我不确定是什么。