list - Lisp 用于列表处理。有树处理的语言吗?

标签 list tree lisp language-design parallel-processing

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/

相关文章:

c++ - 在表达式树中插入节点

apache-spark - Spark : build recursive tree path for every node of an hierarchy DataFrame

lisp - 设置和重置系统变量 - AutoCAD LISP

C# 与 Java - 通用列表

r - 列表中最长元素的长度

python - 将每一列作为自己的列表

mysql - 使用 CakePHP Tree Behavior 在一张表中有多棵树

java - 我如何从中创建一棵树?

lisp 做循环阶乘代码

macros - LISP 中的 Sum 和 product 宏