Idris在向量的底层是否进行任何优化?因为从外表看,Idris向量只是一个已知大小(在编译时已知)的链表。实际上,一般情况下,您可以表示以下等式(我猜测一下语法):
Vector : Nat -> Type -> Type
Vector n t = (l: List t ** length l = n)
因此,虽然这种方法可以避免范围错误,但向量(在传统意义上)的真正优势在于性能,特别是O(1)的随机访问。似乎idris向量不支持这一点(你如何编写索引函数以实现这种性能?)。
假设没有任何巫术在底层运行(就像“Nat”一样),以重新配置向量,“Idris”中是否有随机访问数据类型?
在代数类型系统中,这样的事情将如何被定义?当然,似乎不可能在归纳上定义它。
在像Idris这样的类型系统中,是否可能创建一个数据类型,支持O(1)的随机访问,并且知道其长度,以便所有访问都可以得到证明是有效的?(Haskell有类似数组的向量,但它们的具体实现对于普通用户(包括我)来说是不透明的)
A * B * ... * C
编译成一个数组,当你插入 n = 5 时,绝对运行时间应该与插入 n = 100000 相同,但只有在编译时才能实现这一点。 - Jason Gross