Haskell中的文字编程真的是“文化编程”吗?

时间:2013-06-01 04:28:17

标签: haskell literate-programming

我是文学编程概念的新手。我正在阅读关于这个主题的Donald Knuth's paper(PDF),并且在最初的引言中,他说:

  

而不是想象我们的主要任务是指导计算机做什么   那么,让我们集中精力向人类解释我们想要什么   要做的电脑。

     

他或她[文学编程的实践者]努力争取一个项目   这是可以理解的,因为它的概念已被引入   使用正式的混合物,最适合人类理解的顺序   和非正式的方法,相互促进。

然后,进一步阅读:

  

关于程序的一个问题是它的结构关系。   一个复杂的软件包括简单的部分和   这些部分之间的简单关系;程序员的   任务是陈述那些部分和那些关系,   无论以何种顺序最适合人类理解 -   不是像一个严格确定的顺序,如自上而下或   自下而上

     

(...)

     

自上而下的编程让您有一个强烈的想法   你去哪里,但它迫使你在你的计划中保留很多计划   头;悬念累积起来,因为没有任何东西真正被钉死,直到   结束。编程的优势在于你不断运用   越来越强大的铅笔,随着越来越多的子程序   建造;但它迫使你推迟整个计划   组织直到最后一刻,所以你可能会漫无目的地挣扎。

     

因此,WEB语言允许一个人表达   节目中的“意识流”秩序。纠纷   能够将所有内容都加入到安排中   PASCAL编译器要求。   WEB的这个功能可能是它最大的资产;

上面的摘录让我对这个主题感兴趣,所以我调查了一下。在任何搜索引擎提供的结果中都不难看出Haskell和文字编程之间的关系,但我没有看到“最适合人类理解的命令”。相反,我看到了一个做得很好的文档,同时保持了计算机工作所需的顺序。

  • 您是否可以使用“文字编程”一词来消除该订单问题?
  • 是否有其他文字编程定义不需要“意识流”顺序功能?
  • Haskell真的有文化编程能力(使用Knuth的定义)吗?

最后,我不得不说,作为一个个人观点,即使Haskell所做的(也可能是许多其他语言)不是Knuth的文字编程,我仍然喜欢这种关于方法和算法的详尽描述的想法。当评论超出代码时,它有很大的作用。


WEB和TANGLE是系统的一部分,最初是D. Knuth在他的第一个文化编程概念的实现中使用的。

1 个答案:

答案 0 :(得分:15)

Haskell在大多数情况下在订购时非常灵活。在Haskell模块中,所有声明和定义可以按任何顺序发生。由于引用透明性,提取子问题也很容易,以便在其他地方实现它们。

订单重要的主要区域是模式匹配。函数的所有方程都必须在一起,因为它们按顺序匹配,所以它们不能总是重新排序。但是,我不认为这是一个重要的限制,因为(a)这通常是非常局部化的;(b)具有大量方程的大函数可以(并且可能应该)重构为更小的部分,然后更容易重新排序

最令人讨厌的限制是导入声明必须位于模块的顶部。这确实打破了意识流,并且用Haskell编写的许多文学程序都以“不介意这些导入,你会看到我们以后需要它们”的语句开头。与Knuth对文字编程的定义更为一致的是,能够在文本中更自然地命名导入,从上下文中可以清楚地了解为什么需要它们。

除此之外,我认为Haskell适用于文学编程。它可能不完全符合Knuth的定义,但我认为它足够接近。