模式演算是否代表了语言上的进步,还是我们回到了LISP?


11

巴里·杰伊(Barry Jay)在书中提出了一些大胆的主张-基本上是说,在程序的核心,一切都是原子的或组成的。然后,只需导航此组成关系即可轻松地迭代,过滤和更新事物。

这是计算机科学在计算机语言领域的新前沿吗?还是我们只是回到LISP?


13
回到Lisp将是向前迈出的一步。
Shane 2010年

4
这不是一个明确定义的问题:它应该成为社区Wiki。
查尔斯·斯图尔特

同意@Shane,但认为它需要类型和一组现代图书馆
hawkeye

Answers:


6

Jay最近的工作的主要好处之一是,它减少了为了遍历数据结构以执行诸如map之类的操作而需要编写的样板代码。模式演算可以使所有数据结构一次编写遍历代码,并将其应用于您自己的数据结构。当然,这减少了所需的代码量,但无法使您编写任何其他方式无法编写的程序。当然,工作中有许多有趣的想法,但仍有待证明它确实有效。


6

我不熟悉Barry Jay的最新作品,但他的较旧作品包含您在Lisp中无法完成的工作,因为这些类型提供了更多信息。

例如,假设您要定义Lisp数据结构的大小。对于一个原子,它是1;对于一个n 原子的列表,它是n;更一般地,它的size(x)+ size(y)(cons x y)

现在将各种类型混合在一起。列表的大小就是它的长度。现在原子列表的大小是多少?如果您将此数据结构视为一个列表(其元素恰好是原子列表),那么答案就是列表的长度。如果您认为此数据结构包含恰好存储在列表列表中的原子,那么答案就是元素列表长度的总和。

类型使您可以区分原始数据的这两个视图(形状)。您需要一个可以区分(列表)(列表原子)和(列表列表)(原子)的类型系统。这种区别的最常见实现是使用类型类(如Haskell中那样)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.