在论文中,我看到了列表的定义(T
是您想要的任何类型):
listof T ::= Nil | Cons T (listof T)
我认为这说:
类型T
的列表定义为Nil
或应用于cons
类型列表的函数T
的结果,其中cons
链接带有另一个列表的列表(余数 - 可以是nil
)。
这是准确的描述吗?
答案 0 :(得分:2)
是。这就是Lisp lists的构建方式。
这是链接列表。由于Nil
或Cons
是内存中的对象,因此我们为列表中的每个元素都有一个对象。该对象具有 - 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)时间,因此通常一个目的是防止这种情况。因此,通常会遍历列表,例如发出某些元素(例如,这些元素满足给定的谓词)。