文学编程的主要思想是将程序编写为数学文本。人们可以尽可能清楚地定义程序中所需的每个概念是什么意思,然后解释它是如何在语言中实现的,以及为什么决定以这种方式而不是其他方式来实现,或者以后会改变什么。
还可以通过注释要更改的代码段并插入解释更改原因的新代码来记录更改。某些更改可能取决于代码的转换以优化其性能。例如创建一个循环,而不是在某些类似 C 的语言中创建 2 个循环,将一个表达式更改为一个更简单的表达式,等等。或者更复杂的东西,例如更改其他数据结构以表示信息。每一次更改都有充分的理由和记录。关于程序的问题域,只要阅读源代码,深入了解即可。避免由于模棱两可而导致的错误。程序的起源有完整的记录,以后可以回忆起一切,因为每个想法都在程序中。
严格来说,如果程序被开发,可以用纯文本编写有文化的程序,但是用 TeX/LaTeX 排版是最美观、最实用、最简单的方法,因为在大多数编程语言中放置 LaTeX 标记并不困难。
用 Haskell 编写识字程序是很自然的,因为 Haskell 脚本包含一组声明而不是指令。您可以按任何顺序放置所有声明。这在其他语言中有所不同,在这些语言中,以特定方式对指令进行排序很重要。
我没有使用过 web 或 cweb 或类似的程序,但这些程序有助于以人类的逻辑顺序排版程序,而可以生成程序模块以进行正确编译。
有一个名为 Listings 的 LaTeX 包,它很容易使用,你可以开始每段代码关闭评论并结束打开新评论的代码,据我所知,是这样的:
% /* begin of literate program
\documentstyle{article}
\usepackage{listings}
\lstdefinitions here I do not remember the syntax. Here one can define
a replacement for startcode*/ and /*endcode for spaces.
more definitions here
\begin{document}
Your explanation including formulas like $s=c\times\sum_{i=0}^{i=N} x_i$ etc.
\begin{lstlising}
startcode*/
s=0
for(i=0;i<=N;i++) s=s+x[i];
s=c*s;
etc..
/*endofcode
\end{lstlisting}
More explanation ...
\end{document}
% end of literate program */
在正文的序言中,您可以将 startcode*/ 和 /*endofcode 定义为关键字,以替换为 Listings 包的额外定义中的空格。请参阅软件包文档。
在 LaTeX 源代码的末尾只需键入:
% end of literate program */
这是开始时 LaTeX 中的评论,您可以放置相反的内容:
% /* start of program
编译程序时去掉%LaTeX注释符号,用LaTeX编译时再放上。
如果您以前从未使用过 LaTeX,则可以先从纯文本开始。也许将它与 doxigen 结合起来以索引所有内容。LaTeX 不需要 Doxigen,因为它是一个排版系统,您可以在其中创建多个索引、超链接,将文档组织成一本书。
Haskell 程序通常以文字风格编写。也许浏览一些书或文章来看看是个好主意。