什么是“表达问题”?

我对这是什么有一个粗略的想法,但如果有人解释他们认为简洁直观的“表达问题”,我很乐意听到它。


观看本讲座。

这个想法是你的程序是一个数据类型和对它的操作的组合。 该问题要求提供一种实现,该实现允许添加新类型和新操作的情况,而不需要重新编译旧模块并保持静态类型安全(不需要强制转换或运行时类型检查)。

有趣的是,在函数式编程语言中很容易添加新的操作,但很难将事例添加到数据类型中。 而以OO语言来说,这是相反的。 这是两种编程范式之间的重大概念差异之一。


问题背后的想法是文本是一维的。 即使你有行和列,你一般一行一行地逐行阅读。 编译器也是如此。

你试图在其中表示一些2维或更多维数据。 例如,按行排序的表格如下所示:

((A, B, C), (D, E, F), (G, H, I))

在这个表示中,最后添加一个新行非常容易,而不需要触及其他行:

((A, B, C), (D, E, F), (G, H, I), (J, K, L))

但添加列有点问题,您需要触摸它4个不同的地方:

((A, B, C, M), (D, E, F, N), (G, H, I, O), (J, K, L, P))

在处理抽象类时,您通常会遇到这个问题:将新的子类型添加为新模块非常容易,但是当您添加新的抽象方法时,您需要触摸所有模块并添加它; 你需要在很多地方做同样的事情。 通常你会抽象以防止这些重复的事情。

只要您使用1D表示法,就无法解决此问题。

解决这个问题的方法是编辑器,它可以让你像编辑一个真正的表格那样编辑这些表格,而不是像文本一样(在一个像视图一样的Excel中,你可以方便地添加新的列和行)。


这篇文章也有关于解决Clojure问题的文章,但是这个问题是用Java表达的,所以即使你不了解Clojure,尤其是在小图表的帮助下,它也应该是有意义的。

链接地址: http://www.djcxy.com/p/22899.html

上一篇: What is the 'expression problem'?

下一篇: What does hysteresis mean and how does it apply to computer science or programming?