什么是'表达问题'?

时间:2010-08-29 20:02:06

标签: programming-languages functional-programming computer-science

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

3 个答案:

答案 0 :(得分:39)

观看this lecture

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

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

答案 1 :(得分:15)

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

并且您尝试在其中表示某种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视图中,你可以方便地添加新的列和行)。

答案 2 :(得分:1)

还有this article about solving the problem with Clojure,但问题出现在Java中,所以即使你不了解Clojure也应该有意义,特别是在小图表的帮助下。