当前位置: 首页 > 知识库问答 >
问题:

Idris向量与链表

叶鸿
2023-03-14
Vector : Nat -> Type -> Type
Vector n t = (l: List t ** length l = n)
  • 假设没有特殊方法(就像nat)来重新配置vectors,那么IDRIS中是否存在随机访问数据类型?
  • 如何在代数类型系统中定义这样的东西?当然,似乎不可能归纳地定义它。
  • 在像Idris这样的类型系统中,是否有可能创建一个支持O(1)随机访问的数据类型,并知道它的长度,以便所有访问都是可证明的有效的?(Haskell有数组样式的向量,但它们的具体实现对包括我在内的普通用户来说是不透明的)

共有1个答案

郏景澄
2023-03-14

它没有做任何优化向量查找的事情(至少在写这个答案的时候是这样)。

这并不是因为做起来有任何困难,而是更多的是因为我宁愿有某种通用的框架来编写这种优化,而不是硬编码它们。诚然,我们已经为NAT提供了硬编码优化,但我仍然不希望以特殊的方式添加更多负载。

根据您实际需要它的目的,实验性唯一性类型系统可能会有所帮助,因为您可以在底层拥有一个低级别的可变内容,并且仍然可以安全有效地访问和更新高级语言中的纯样式。我们等着瞧...

 类似资料:
  • 问题内容: 向量是同步的,ArrayList是不同步的,但是我们可以通过来同步ArrayList ,那么哪个会更好,更快地执行? 问题答案: 同步收集既浪费时间又危险。一个很简单的例子,为什么它们不好,是考虑两个线程在同一集合上同时运行一个循环: 我们的列表可能是同步的(例如,Vector),并且此代码仍然可怕地中断。为什么?因为对size(),get(),remove()的单个调用是同步的,但是

  • 问题内容: 因此,在标头的c ++文档中,有一个不错的函数可让您对向量进行排序。我上课。我有一个指向该类()对象的指针向量,并且我想通过不同的参数(例如年龄,姓名长度等)来比较人员。 我已经有返回所需变量的函数,但是我不确定该怎么做。这是c ++参考http://www.cplusplus.com/reference/algorithm/sort/中的排序向量函数的链接。 问题答案: 很简单: 然

  • NowCoder 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解题思路 // java private TreeNode pre = null; private TreeNode head = null; public TreeNode Convert(TreeNode root) { inOrder(ro

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

  • 主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"

  • 单向链表 结构体 struct   rt_slist_node   单向链表节点 更多...   宏定义 #define  rt_slist_entry(node, type, member)   rt_container_of(node, type, member)   获取单向链表节点的数据结构   #define  rt_slist_for_each(pos, head)   for (po