问题标签 [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.
haskell - Haskell 中的文学编程真的是“文学编程”吗?
我是识字编程概念的新手。我正在阅读Donald Knuth关于这个主题的论文 (PDF),在一开始,在引言中,他说:
与其想象我们的主要任务是指导计算机做什么,不如专注于向人类解释我们希望计算机做什么。
他或她 [识字编程的实践者] 力求一个易于理解的程序,因为它的概念是按照最适合人类理解的顺序引入的,使用了相互加强的正式和非正式方法的混合。
然后,进一步阅读:
一个程序的一个特点是它的结构关系。一个复杂的软件由简单的部分和这些部分之间的简单关系组成;程序员的任务是陈述这些部分和那些关系, 以最利于人类理解的顺序——而不是像自上而下或自下而上那样严格确定的顺序。
(...)
自上而下的编程让你清楚地知道你要去哪里,但它迫使你在脑海中保留很多计划;悬念不断增加,因为直到最后都没有真正确定下来。编程的优势在于,随着越来越多的子程序被构建,你会不断地使用越来越强大的铅笔;但它迫使您将整个程序组织推迟到最后一分钟,因此您可能会漫无目的地挣扎。
因此,WEB 语言允许人们以“意识流”的顺序来表达程序。TANGLE 能够将所有内容打乱成 PASCAL 编译器要求的安排†</sup>。WEB 的这一特性也许是它最大的资产。
上面的摘录让我对这个主题很感兴趣,所以我调查了一下。从任何搜索引擎提供的结果中不难看出 Haskell 和 literate 编程之间的关系,但我没有看到“人类理解的最佳顺序”。相反,我看到了一个非常完善的文档,同时保持了计算机工作所需的顺序。
- 你能用“文学编程”这个词来解决这个顺序问题吗?
- 有没有其他不需要“意识流”顺序特征的文学编程定义?
- Haskell 真的有识字编程能力(使用 Knuth 的定义)吗?
最后,作为个人观点,我不得不说,即使 Haskell 所做的(可能还有许多其他语言所做的)也不是 Knuth 的文学编程,当涉及到对方法和算法的详尽描述时,我仍然喜欢这个想法。当评论远远超过代码时,它会起到很好的作用。
†</sup> WEB 和 TANGLE 是最初 D. Knuth 在他第一次实现识字编程概念时使用的系统的一部分。
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.
r - 在 org 模式下链接/导入外部源代码
这篇论文启发我检查了 Emac 的org-mode,目前我尝试评估什么更适合编写我的文档:knitr / Sweave(我主要使用 R 进行编程)或 org-mode。
我真正喜欢 knitr 的地方在于可以将实际源代码外部化(注意:R 脚本中标签/名称的声明似乎已从## ---- label -------
变为## @knitr label
; 参见?read_chunk
)并将它们“链接”到实际的读写编程/可重复研究文档(而不是在该文档中实际编写代码):
“导入”
并通过引用相应的标签来“重用”
问题
这在 org-mode 中是否也有可能,还是我必须将实际代码放入.org
文档中?
我找到了这个,但我没有找到任何链接/导入外部源代码文件的具体概念,并且能够通过将链接代码放在里面来执行它们
背景
我确实看到这种方法可能会在一定程度上对比识字编程的一般范式。但我喜欢以某种“原子”风格工作,因此我感觉更自然的是首先将文件分开,然后动态地将所有内容混合在一起。
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.
literate-programming - 自然语言编程与文学编程
我看不出自然语言编程和文学编程之间的区别。如果有人解释,我将不胜感激。
racket - 如何在“scribble/lp”中使用“typed/racket”
是否可以使用 other #lang
s in#lang scribble/lp
进行识字编程?
例如,我想使用#lang typed/racket
in #lang scribble/lp
。如何意识到这一点?
emacs - Emacs org-babel 自动加载?
我目前正在学习 Clojure,并且正在评估书中begin_src
/end_src
块中的示例代码。效果很好,因为 org 为原本不相关的代码片段添加了结构。
当这些部分变得相关时,问题就开始了,即代理章节的示例代码使用了为前两章参考定义的函数。因此,在尝试评估来自新 nrepl 会话的最后一个块时,undefined function
会引发错误。然后我必须找到实际定义相关函数的块并对其进行评估。如果它不依赖于其他任何东西,我很幸运。
一种解决方案可能是按顺序重新评估所有源块。这肯定会起作用,但是会不必要地评估大量块,因为它们不在我真正想要评估的块的依赖项中。
我在想也许可以实现一些类似于自动加载的机制,例如:
所以当我评估这个块时:
并出现“无法解析符号:正方形”,org 将尝试查找当前缓冲区中的任何源块是否定义了此函数。
我愿意接受任何其他解决此问题的建议,只要该解决方案允许我有效地将整本书中的代码示例存储在单个 org 文件中。
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 进行读写编程的工作方式吗?
谢谢你的阅读。
伦纳德
r - 有没有办法通过文学编程进行测试驱动开发?
我正在学习使用 R 进行我的第一个单元测试,并且我在 R Markdown 文件中编写我的代码,以便轻松提交简短的研究报告。同时,我想测试我在这些文件中使用的函数,以确保结果是合理的。
这就是问题所在:R Markdown 文件旨在进入 HTML 编织器,而不是 RUnit 测试工具。如果我想将一个函数加载到测试代码中,我有几个选择:
- 从 Markdown 文件中复制粘贴代码块,将 Markdown 文档中的代码与测试代码分离
- 把我的测试代码放在 Markdown 文件里面,这样会导致报告难以理解(也许最后还能忍受)
- 编写代码,先进行测试,然后将其作为库包含在 Markdown 代码中,这消除了将代码包含在报告正文中的信息特征
有没有更明智的方法来避免这些方法的缺点?