2011-05-16 50 views
52

我看到这个报价在很多地方工作:为什么最好有100个功能上的一个数据结构比10的数据结构10个功能

“最好是有100个功能进行操作一个数据结构超过10个数据结构上的10个函数“。 - 阿兰玻璃市

但我从来没有见过它解释了为什么这应该是真的。是否应该尝试从第一个数据结构中导出其他数据结构以避免重复数据?我觉得我错过了一些背景。

+0

因为100个函数> 10个函数。 – 2014-11-19 07:11:36

+0

因为一个数据结构上的100个函数更通用,因此提供了更好的组合,而10个数据结构上的10个函数是特定于其数据结构的,因此在数据结构中组合较少(或不可能)。 – mljrg 2018-02-09 16:49:22

回答

70

引述来自艾伦·佩利Epigrams on Programming,发表在1982年

这句话的含义以及在Lisp,那里的那个工作,并与名单专门处理功能众人体现,而且你可以完成很多事情,只需要列表和各种在列表上运行的函数,这使得它们比任何单一目的的数据结构更加强大。

Lua,作为另一个例子,uses tables to simulate classes。为什么使用表格来创建对象而不是创建像面向对象的语言这样的语言级别的类和对象呢?由于您的对象现在是一个表格,您可以免费使用任何为您的对象上的表格定义的函数!更好的是,我们不必使用特定于类的语法混淆语言,而必须重新定义我们想要的类中的函数。

玻利斯所说的绝对是Lisp和functional programming中一个突出的思维模式。你的一个数据结构中的这100个函数可以用许多独特的方式组合在一起,因为它们都在相同的数据结构上运行,但是你也不能真正在10个数据结构上混合这10个函数,因为它们只是被定义的来处理他们特定的数据结构。

这个更现代和更简单的变化是根据抽象。如果我们使用Java编码,那么您宁愿在List接口或同一组十个函数中编写100个函数,一次用于ArrayList,一次用于LinkedList,一次用于....

+1

+1非常好的答案。 – ralphtheninja 2011-05-28 14:51:53

+1

尤其是我的问题含糊不清,谢谢。 – GlennS 2011-06-06 11:28:34

+1

我认为这个答案的最后一段强调了为什么艾伦玻利斯的报价不再适用。充其量,它归结为你认为构成“数据结构”的东西。 – 2011-07-10 08:47:30

6

计算机的结构和解释项目(SICP)回答你的问题如下:

Screenshot from SICP

你可以看到online version of the book here

编辑的原创内容(从评论包括):

“在Pascal中,大量可申报的数据结构引发了功能内的专业化。”专业化是不好的,因为它用我自己的话来抑制“意外情绪”/创造力 - 我会说 - 。

换句话说,如果函数太特殊,那么它们不能以创建函数时未知的方式重用。

很好的例子是foldhttps://hackage.haskell.org/package/base-4.8.1.0/docs/Data-Foldable.html)这是一个数据结构不可知的,一般的高阶函数。它可以在树上使用,例如

data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a). 
+0

这并不回答原因。 – isomorphismes 2015-06-15 20:20:28

+2

是的,如果你看不懂,它不会。 – jhegedus 2015-09-11 08:06:24

+0

启发我。我只是重新阅读它。 – isomorphismes 2015-09-11 13:43:27