我还不了解文艺编程的概念。我正在阅读唐纳德·科诺斯(Donald Knuth)的论文(PDF),关于这个主题,一开始在介绍中他说:
与其想象我们的主要任务是指示计算机做什么,不如集中精力向人类解释我们希望计算机做什么。
文艺编程实践者追求的是一个易于理解的程序,因为它的概念已按照最适合人类理解的顺序进行介绍,使用正式和非正式的方法相结合,这些方法互相强化。
随后,再看下去:
关于程序的一件事是它的结构关系。复杂软件由简单的部分和部分之间的简单关系组成;程序员的任务是陈述这些部分和关系,无论以何种最适合人类理解的顺序——而不是某种严格确定的自上而下或自下而上的顺序。
(...)
自上而下编程让你对前进方向有强烈的想法,但它迫使你将许多计划记在脑中;悬念会因为直到最后没有确定下来而累积。自下而上编程具有你不断运用越来越强大的铅笔的优点,因为建立了越来越多的子程序;但它迫使你将整个程序组织推迟到最后一刻,所以你可能会毫无目的地挣扎。
因此,WEB语言允许人以“意识流”的顺序表达程序. TANGLE能够混淆所有东西,并按照PASCAL编译器要求的排列进行排序†. WEB的这个特性也许是其最大的优点;
上面的摘录让我对这个主题感兴趣,所以我更深入地调查了一下。在任何搜索引擎提供的结果中都很容易看出Haskell与文学编程之间的关系,但我没有看到“最适合人类理解的顺序”。相反,我看到了非常完美的文档,同时保持计算机要求的顺序才能工作。
- 你能使用“文学编程”这个术语并去掉那个顺序问题吗?
- 是否有任何其他定义文学编程的方式不需要 "意识流" 的顺序特征?
- Haskell 真的具备文学编程能力(使用 Knuth 的定义)吗?
最后,我必须说作为个人观点,即使 Haskell(可能还有许多其他语言)并不是 Knuth 的文学编程,当涉及到方法和算法的详尽描述时,我仍然喜欢这个想法。当注释远远超过代码时,它有很好的用途。
† WEB 和 TANGLE 是最初 D. Knuth 在他的第一个文学编程实现中使用的系统的一部分。