问题标签 [literate-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1101 浏览

haskell - Haskell 中的文学编程真的是“文学编程”吗?

我是识字编程概念的新手。我正在阅读Donald Knuth关于这个主题的论文 (PDF),在一开始,在引言中,他说:

与其想象我们的主要任务是指导计算机做什么,不如专注于向人类解释我们希望计算机做什么。

他或她 [识字编程的实践者] 力求一个易于理解的程序,因为它的概念是按照最适合人类理解的顺序引入的,使用了相互加强的正式和非正式方法的混合。

然后,进一步阅读:

一个程序的一个特点是它的结构关系。一个复杂的软件由简单的部分和这些部分之间的简单关系组成;程序员的任务是陈述这些部分和那些关系, 以最利于人类理解的顺序——而不是像自上而下或自下而上那样严格确定的顺序

(...)

自上而下的编程让你清楚地知道你要去哪里,但它迫使你在脑海中保留很多计划;悬念不断增加,因为直到最后都没有真正确定下来。编程的优势在于,随着越来越多的子程序被构建,你会不断地使用越来越强大的铅笔;但它迫使您将整个程序组织推迟到最后一分钟,因此您可能会漫无目的地挣扎。

因此,WEB 语言允许人们以“意识流”的顺序来表达程序。TANGLE 能够将所有内容打乱成 PASCAL 编译器要求的安排†</sup>。WEB 的这一特性也许是它最大的资产。

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

  • 你能用“文学编程”这个词来解决这个顺序问题吗?
  • 有没有其他不需要“意识流”顺序特征的文学编程定义?
  • Haskell 真的有识字编程能力(使用 Knuth 的定义)吗?

最后,作为个人观点,我不得不说,即使 Haskell 所做的(可能还有许多其他语言所做的)也不是 Knuth 的文学编程,当涉及到对方法和算法的详尽描述时,我仍然喜欢这个想法。当评论远远超过代码时,它会起到很好的作用。


†</sup> WEB 和 TANGLE 是最初 D. Knuth 在他第一次实现识字编程概念时使用的系统的一部分。

0 投票
2 回答
4024 浏览

haskell - How to comment out lines in literate haskell

I am having trouble commenting out lines of code in an lhs-style haskell program, so both haskell and Latex ignore the line.

When I use -- then my lh2tex will try to render the haskell code as a comment. But this often fails, because the code contains dollars and other stuff which is confusing for Latex.

When I use --%, then Latex is happy as it just ignores the comment, but haskell does not like --%. Only when I put a space after -- haskell is okay with it, but then Latex is complaining again.

0 投票
1 回答
248 浏览

r - 在 org 模式下链接/导入外部源代码

这篇论文启发我检查了 Emac 的org-mode,目前我尝试评估什么更适合编写我的文档:knitr / Sweave(我主要使用 R 进行编程)或 org-mode。

我真正喜欢 knitr 的地方在于可以将实际源代码外部化(注意:R 脚本中标签/名称的声明似乎已从## ---- label -------变为## @knitr label; 参见?read_chunk)并将它们“链接”到实际的读写编程/可重复研究文档(而不是在该文档中实际编写代码):

“导入”

并通过引用相应的标签来“重用”

问题

这在 org-mode 中是否也有可能,还是我必须将实际代码放入.org文档中?

我找到了这个,但我没有找到任何链接/导入外部源代码文件的具体概念,并且能够通过将链接代码放在里面来执行它们

背景

我确实看到这种方法可能会在一定程度上对比识字编程的一般范式。但我喜欢以某种“原子”风格工作,因此我感觉更自然的是首先将文件分开,然后动态地将所有内容混合在一起。

0 投票
2 回答
1188 浏览

clojure - Can org-mode babel tangle produce leiningen directories?

We want to automate the production of a Leiningen project tree entirely from an org-mode babel file. We want to do this so that we can also create beautiful, typeset documentation via org-latex-export-to-pdf. We want no less than full literate programming in Clojure from org-mode.

The following command:

produces a tree that looks like this:

We want to do the identical thing just by running org-babel-tangle, and no more, in our org-mode buffer in emacs.

A difficulty arises: whereas tangle is happy to produce files in existing subdirectories like src and test, it seems reluctant to produce the subdirectories if they don't exist. That means we must create the directory structure by some other means -- unless we can get tangle to do it for us, and that's the subject of this StackOverflow question.

There are six files in the directory structure created by Leiningen. I can remove them all and re-create them from my org-file with BEGIN_SRC blocks such as the following

Notice particularly the name of the subdirectory path

All is well if our directory structure already exists. org-mode's tangle will create or update all six files described above and create new files in any existing directory. We don't know how to get tangle to produce the directories; it complains that there is no such directory.

A copy of the desired .org file can be found here if you would like more details.

0 投票
1 回答
630 浏览

haskell - 如何为有文化的 Haskell 编程设置 vim 的标识?

0 投票
2 回答
294 浏览

literate-programming - 自然语言编程与文学编程

我看不出自然语言编程和文学编程之间的区别。如果有人解释,我将不胜感激。

0 投票
2 回答
338 浏览

racket - 如何在“scribble/lp”中使用“typed/racket”

是否可以使用 other #langs in#lang scribble/lp进行识字编程?

例如,我想使用#lang typed/racketin #lang scribble/lp。如何意识到这一点?

0 投票
0 回答
172 浏览

emacs - Emacs org-babel 自动加载?

我目前正在学习 Clojure,并且正在评估书中begin_src/end_src块中的示例代码。效果很好,因为 org 为原本不相关的代码片段添加了结构。

当这些部分变得相关时,问题就开始了,即代理章节的示例代码使用了为前两章参考定义的函数。因此,在尝试评估来自新 nrepl 会话的最后一个块时,undefined function会引发错误。然后我必须找到实际定义相关函数的块并对其进行评估。如果它不依赖于其他任何东西,我很幸运。

一种解决方案可能是按顺序重新评估所有源块。这肯定会起作用,但是会不必要地评估大量块,因为它们不在我真正想要评估的块的依赖项中。

我在想也许可以实现一些类似于自动加载的机制,例如:

所以当我评估这个块时:

并出现“无法解析符号:正方形”,org 将尝试查找当前缓冲区中的任何源块是否定义了此函数。

我愿意接受任何其他解决此问题的建议,只要该解决方案允许我有效地将整本书中的代码示例存储在单个 org 文件中。

0 投票
2 回答
323 浏览

scons - 使用 scons 进行识字编程

使用 noweb,我想从 noweb 输入文件 **.nw 生成文档文件(或源文件)

从手我会做这样的事情:

现在我想问我是否可以使用 scons 来自动执行此操作。

想象一下,我的项目目录在 $MYPROJECT 上。这里我们有“$MYPROJECT/SConstruct”。现在我定义了一个 scons 工具“tangle.py”(从“noweb.py”简化)。这里我们有“$MYPROJECT/site_scons/site_tools/tangle.py”

此工具从 nw 文件生成 cpp 文件。

但是如果我做类似的事情

我进入了一个依赖圈。SCons 将找到并中止并显示错误消息。

正在做 ...

...该工具将停止从 nw 文件生成 cpp 文件。(Cpp 目标下降)

您知道使用 scons 进行读写编程的工作方式吗?

谢谢你的阅读。


伦纳德

0 投票
1 回答
1204 浏览

r - 有没有办法通过文学编程进行测试驱动开发?

我正在学习使用 R 进行我的第一个单元测试,并且我在 R Markdown 文件中编写我的代码,以便轻松提交简短的研究报告。同时,我想测试我在这些文件中使用的函数,以确保结果是合理的。

这就是问题所在:R Markdown 文件旨在进入 HTML 编织器,而不是 RUnit 测试工具。如果我想将一个函数加载到测试代码中,我有几个选择:

  1. 从 Markdown 文件中复制粘贴代码块,将 Markdown 文档中的代码与测试代码分离
  2. 把我的测试代码放在 Markdown 文件里面,这样会导致报告难以理解(也许最后还能忍受)
  3. 编写代码,先进行测试,然后将其作为库包含在 Markdown 代码中,这消除了将代码包含在报告正文中的信息特征

有没有更明智的方法来避免这些方法的缺点?