我在很多地方都看到过这句话:
“一个数据结构上有100个函数比10个数据结构上有10个函数更好。”-Alan Perlis说。
但我从未见过它解释了为什么这应该是真的。仅仅是为了避免重复数据,您应该尝试从第一个派生出其他9个数据结构吗?我觉得我错过了一些背景。
发布于 2011-05-28 06:45:32
这句话出自1982年出版的艾伦·佩利斯( Alan )的关于程序设计的注释。
这句话的含义在Lisp中得到了很好的体现,在这里,有大量的函数专门操作和处理列表,您只需使用列表和在列表上操作的各种函数就可以完成很多任务,这使得它们比任何单一用途的数据结构都强大得多。
Lua,作为另一个例子,使用表模拟类。为什么要使用一个表来创建对象而不是创建语言级别的类和像面向对象语言那样的对象呢?由于您的对象现在是一个表,您可以使用为您的对象上的表定义的任意数量的函数,免费!更好的是,我们不必用特定于类的语法来扰乱语言,并且必须从表中为类重新定义函数。
Perlis所说的绝对是Lisp和功能程序设计中一个突出的思维模式。你的一个数据结构上的100个函数可以以许多独特的方式组合在一起,因为它们都是在相同的数据结构上运行的,但是你不能把10个函数真正地混合在10个数据结构上,因为它们的定义只是为了处理它们特定的数据结构。
一个更现代和更简单的变体是从抽象概念的角度思考。如果我们用Java编写代码,您是希望在列表接口上编写100个函数,还是使用相同的10个函数集,一次用于ArrayList,一次用于LinkedList,一次用于.
发布于 2014-08-24 15:04:30
计算机程序的结构和解释(SICP)回答您的问题如下:

您可以看到在线版本的书在这里的原始内容。
编辑(包括在评论中):
“在Pascal中,过多的可声明的数据结构会在功能中引起专门化。”专业化是不好的,因为它用我自己的话来抑制“偶然”的/creativity(我想说)。
换句话说,如果函数太特殊,那么它们就不能以函数创建时所不知道的方式重用。
fold (https://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).https://stackoverflow.com/questions/6016271
复制相似问题