使用点对中的向量的Lisp数据结构

时间:2019-06-22 15:27:51

标签: vector data-structures elisp

作为对this的一个迟来的后续行动,有人能启发我为什么Emacs ELPA软件包isNewCourse = true文件中使用的数据结构是一个点对的名称(符号)和一个向量包含很多东西?

以这种方式进行的好处是什么?似乎只是随机刺刺是故意的。这是建立在什么先例上?

isNewCourse

...想象//get courses count to-be accepted router.route("/courses").get((req, res) => { CourseDB.countDocuments({}, function(err, count) { res.status(200).send(`${count}`); }); }); 拥有更多列表成员;例如MELPA可用软件包列表很大。因此,如果我做archive-contents,我就会得到以(1 (ace-window . [(0 9 0) ((avy (0 2 0))) "Quickly switch windows." single ((:url . "https://github.com/abo-abo/ace-window") (:keywords "window" "location"))]) 开头的点对的伴随向量。似乎该列表旨在使用以前的sexp。是的,为什么他们在这种情况下使用向量?这是一种好习惯吗?我听说Clojure鼓励在列表上更多地使用数组和向量。这更符合Clojure的哲学吗?因此,如果列表更像是一个元组(即具有set且永不变的成员),则应始终使用向量代替列表吗?还是mysterious tuple problem的变体?

1 个答案:

答案 0 :(得分:1)

  

因此,如果列表更像是一个元组,即具有固定不变的成员,那么应该始终使用向量代替列表吗?

这样做有好处 1 ,是的。特别是,访问元素对于矢量来说是O(1),对于列表来说是O(n)。

C-h i g (elisp)Sequences Arrays Vectors解释:

  

“序列”类型是另外两个Lisp类型的并集:列表和   数组。换句话说,任何列表都是序列,任何数组都是   顺序。所有序列的共同属性是每个序列都是   元素的有序集合。

     

“数组”是固定长度的对象,每个对象都有一个插槽   元素。所有元素都可以在恒定时间内访问。四个   数组的类型是字符串,向量,字符表和布尔向量。

     

列表是元素的序列,但不是单个原语   宾语;它由cons单元组成,每个元素一个单元。寻找第N个   元素需要查看N个con单元格,因此距离   列表的开头需要更长的时间才能访问。但是有可能   在列表中添加元素,或删除元素。


1 取决于特定的用例,实际中可能没有,也没有明显的好处。