我在很多地方看到过这句话:
“比起10个函数作用于10种数据结构,使用100个函数处理同一种数据结构更好。“ ——艾伦·佩利斯
但我从未见过对此进行解释的原因。是不是只是一个想法,即应该尝试从第一个数据结构中推导出其他9个数据结构,以避免重复数据?我感觉自己缺少一些上下文。
我在很多地方看到过这句话:
“比起10个函数作用于10种数据结构,使用100个函数处理同一种数据结构更好。“ ——艾伦·佩利斯
但我从未见过对此进行解释的原因。是不是只是一个想法,即应该尝试从第一个数据结构中推导出其他9个数据结构,以避免重复数据?我感觉自己缺少一些上下文。
更现代、更简单的变化是以抽象方式思考。如果我们在编写Java代码,你会更愿意在List接口上编写100个函数,还是只编写同一组十个函数,分别针对ArrayList、LinkedList等?
《计算机程序的构造与解释》(SICP)对您的问题进行了以下回答:
您可以在这里查看该书的在线版本原始内容。
编辑(包含评论):
“在 Pascal 中,可以声明各种各样的数据结构,这导致函数内部出现了特化。” 特化是不好的,因为它抑制了“意外发现”/创造力 - 用我的话来说。
换句话说,如果函数过于特定,则无法以在创建函数时未知的方式重用它们。
一个很好的例子是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).
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)`。 - jhegedus