这是使用cons的列表定义吗?

时间:2017-06-30 11:28:40

标签: list functional-programming cons

在论文中,我看到了列表的定义(T是您想要的任何类型):

listof T ::= Nil | Cons T (listof T)

我认为这说:

类型T的列表定义为Nil或应用于cons类型列表的函数T的结果,其中cons链接带有另一个列表的列表(余数 - 可以是nil)。

这是准确的描述吗?

1 个答案:

答案 0 :(得分:2)

是。这就是Lisp lists的构建方式。

这是链接列表。由于NilCons是内存中的对象,因此我们为列表中的每个元素都有一个对象。该对象具有 - Cons - 两个引用:一个列表在该位置保存的元素,一个到链接列表中的下一个节点。

因此,如果您存储列表(1,4,2,5),那么在内部,它将存储为:

+---+---+   +---+---+   +---+---+   +---+---+
| o | o---->| o | o---->| o | o---->| o | o----> Nil
+-|-+---+   +-|-+---+   +-|-+---+   +-|-+---+
  v           v           v           v
  1           4           2           5

或者您可以像Cons 1 (Cons 4 (Cons 2 (cons 4 Nil)))一样构建它。

Lisp列表的概念在功能逻辑编程语言中非常流行。

使用链接列表通常需要编写与使用数组和arraylists不同的算法。获取 k -th元素将需要 O(k)时间,因此通常一个目的是防止这种情况。因此,通常会遍历列表,例如发出某些元素(例如,这些元素满足给定的谓词)。