Lisp 的名称源自 LISt Pprocessing。链表是 Lisp 语言的主要数据结构,而 Lisp 源代码本身就是由列表组成的。因此,Lisp 程序可以将源代码作为一种数据结构进行操作(这称为同象性)。
但是,根据定义,列表是一种顺序结构。这鼓励我们使用顺序语言习语(一次处理一件事并累积结果的算法)来解决问题。例如,在 cons 单元用于实现单链表的 Lisp 中,car 操作返回列表的第一个元素,而 cdr 返回列表的其余部分。我的愿景是一种用于并行执行的函数式语言,它将问题拆分为大致相等的子问题,递归地解决它们,然后组合子解决方案。
几乎所有编程语言的代码都已经被解析成树;是否有像 Lisp 这样的谐音语言,但以树为主要数据结构?顺便说一句,我将其称为 Treep,用于 TREE P 处理。
更新 Guy Steele 在 2009 年关于并行算法和数据结构的有趣演示 (PDF),Organizing Functional Code for Parallel Execution: or, foldl
and foldr
Considered Slightly Harmful .
最佳答案
Lisp 列表是树,Lisp 代码是树,就像任何其他代码一样。
(+ (* 1 3) (* 4 6))
是一棵树:
+
/ \
/ \
* *
/ \ / \
1 3 4 6
而且它不仅仅是二叉树。
(+ 1 2 3)
+
/|\
/ | \
1 2 3
所以,也许 Lisp 既是你的答案也是你的问题。
关于list - Lisp 用于列表处理。有树处理的语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739401/