我一直在玩各种用Python编写文字的方法.我喜欢noweb
,但我有两个主要问题:首先,很难在Windows上构建,我花费了大约一半的开发时间; 第二,它要求我缩进每个代码块,因为它将在最终的程序中 - 我写的时候不一定知道.我不想使用Leo,因为我非常依赖Emacs.
是否有一个很好的文字编程工具:
谢谢!
更正:noweb
不会让我以后缩进---我误读了我就可以找到的文件.
默认情况下,
notangle
在扩展块时保留空格并保持缩进.因此,它可以与Miranda和Haskell等语言一起使用,其中缩进很重要
这让我只有"Windows上的运行"问题.
目前我只使用Haddock,但在看到一些有文化的Haskell的一些非常有趣的例子(例如这个要点)之后,我有兴趣在一个项目中尝试它.
我得到的问题是:
你怎么写Haddock评论,你在文学部分写什么?
如何将识字编程扩展到多个文件?有人能指出我在一个包含多个模块的程序包中使用文字编程的例子吗?您在大型软件包中使用文字编程的经验是什么?
有文化的Haskell的哪种口味(降价,乳胶,...)是首选?
你为什么要用文字的Haskell或普通的Hillaell编程?你是在两种风格的编程,如果是这样,为什么?
你喜欢block-style(\begin{code}
)还是Bird-style(>
)?为什么?
在过去一年左右的时间里,我在Clojure讨论列表和其他关于Clojure代码记录工具的地方看到过各种各样的公告.这些包括像Marginalia这样的全面识字编程系统,以及用于创建"小片中的Clojure"(甚至是emacs组织模式)的书籍,以及更常规的Javadoc式解决方案,如Autodoc和Javadoc本身.据报道,可以与Clojure一起使用.一个谷歌搜索出现了各种其他,也许一些值得更多的关注,并且肯定有些只是用于生成文档的个人工具.我的问题是什么是最好的文档工具,根据您使用它们的经验,它们的比较优势和劣势是什么?到目前为止,我还没有使用任何文档工具,并且有兴趣尝试一个或多个.
documentation javadoc clojure literate-programming marginalia
我的小组在大多数源代码中都使用了Literate Programming--这意味着内部文档是使用LaTeX编写的.我们一直在使用PStricks来制作系统的精美技术图表,但最近建议使用TikZ.我收集了这些信息:
pdftex
.PStricks只适用于dvips
.我对两个问题的答案很感兴趣.如果您愿意,请随意为每个问题发布一个答案:
这两种工具的学习曲线是什么?(我认为PStricks有一个陡峭的学习曲线;关于TikZ,我不知情.)
被认为是编程API,这两个包中的一个明显比另一个更好吗?如果是这样,哪个设计更好,为什么?(它有哪些属性让你认为它更好?)
为了说明为什么一个API优于另一个API,您可能想要使用示例.
我碰巧真的喜欢Markdown(可能是因为SO)而且我喜欢在Haskell中编程.我最近发现了Literate Haskell(LHS),我想一起使用Markdown和LHS.让我给你这个愚蠢的例子:
Crazy Literate Haskell
======================
This is an example of some literate Haskell Code:
> module Main where
Look at that IO Monad work:
> main = return 2 >>= print
Wasn't that cool?
Run Code Online (Sandbox Code Playgroud)
这是一个有文化的haskell文件的例子,后来由Markdown解析.但是,我希望代码实际上出现在html代码块中,并且没有>之前的>.因此,我不能仅仅将所有代码行缩进四,因为这会产生您在上面看到的降价.基本上,我希望html像这样出来:
<h1>Crazy Literate Haskell</h1>
<p>This is an example of some literate Haskell Code:</p>
<pre><code>module Main where
</code></pre>
<p>Look at that IO Monad work:</p>
<pre><code>main = return 2 >>= print
</code></pre>
<p>Wasn't that cool?</p>
Run Code Online (Sandbox Code Playgroud)
需要注意的是它没有>符号.我该怎么办?
问候.我现在一直在研究Literate Programming,我确实喜欢它背后的想法:你基本上写了一些关于你的代码的文章并写下了尽可能多的设计决策,代码可能围绕模块,内部工作原理由设计决策,潜在扩展产生的模块,假设和结论,所有这些都可以使用tex以一种很好的方式写下来.当然,第一点:它是文档.它必须保持最新,但这不应该那么糟糕,因为你的改变应该有理由,你可以写下来.
但是,文学编程如何在更大程度上扩展?总体而言,文学编程仍然只是文本.当然,非常人类可读的文本,但仍然是文本,因此,很难遵循大型系统.例如,我重新编写了我的编译器的大部分内容以使用>>和一些魔法来将编译步骤链接在一起,因为一些"x.register_follower(y); y.register_follower(z); y.register_follower(a); ... "变得非常笨拙,并将其改为x >> y >> z >> a使它变得更好,尽管这也是它的突破点.
那么,Literate Programming如何扩展到更大的系统?有人试图这样做吗?
我的想法是使用LP来指定使用事件流相互通信的组件,并使用graphviz的子集将所有这些组合在一起.这将是LP的一个相当自然的扩展,因为您可以从网络中提取文档 - 数据流图 - 并且也可以从中生成代码.你怎么看呢?
- Tetha.
我正在使用org-babel进行识字.我的源码结构如下,
-imports
-utility fns
-game structure
- detailed explanations
Run Code Online (Sandbox Code Playgroud)
这是代码的正常结构,我想要做的是将实用程序fns的解释移到最后,这样它就不会在生成的pdf文件中首先出现.现在这可以用noweb扩展来完成,但问题是当你有很多小函数时我必须添加一个带有唯一名称的src_block向下滚动文件并在文件中添加对它的引用这真的很烦人.有没有办法在一个部分中命名所有src_blocks?说本节中的所有代码都进入了块A.
我是文学编程概念的新手.我正在阅读Donald Knuth关于这个主题的论文(PDF),并且在最初的引言中,他说:
我们不是想象我们的主要任务是指导计算机做什么,而是让我们集中精力向人类解释我们想要计算机做什么.
他或她[文学编程的实践者]努力实现一个易于理解的程序,因为它的概念是以最适合人类理解的顺序引入的,使用了相互加强的正式和非正式方法的混合.
然后,进一步阅读:
关于程序的一个问题是它的结构关系.一个复杂的软件包括简单的部分和这些部分之间的简单关系; 程序员的任务是以最适合人类理解的顺序陈述那些部分和那些关系 - 而不是以某种严格确定的顺序,如自上而下或自下而上.
(......)
自上而下的编程让您对自己的目标有了强烈的了解,但它会迫使您保持很多计划; 悬念累积起来,因为没有任何东西真正被钉死到最后.编程的优势在于,随着越来越多的子程序的构建,你不断使用越来越强大的铅笔; 但它迫使你推迟整个计划组织直到最后一分钟,所以你可能会漫无目的地挣扎.
因此,WEB语言允许人以"意识流"顺序表达节目.缠绵能够争夺一切成的安排,一个Pascal编译器的需求†.WEB的这一特性也许是它最大的资产;
上面的摘录让我对这个主题感兴趣,所以我调查了一下.在任何搜索引擎提供的结果中都不难看出Haskell和文字编程之间的关系,但我没有看到"最适合人类理解的命令".相反,我会看到一个做得很好的文档,同时保持计算机所需的顺序才能工作.
最后,作为一个个人观点,我不得不说,即使Haskell所做的(也可能是许多其他语言)不是Knuth的文字编程,我仍然喜欢这种关于方法和算法的详尽描述的想法.当评论超出目前的代码时,它有很大的作用.
† WEB和TANGLE是系统的一部分,最初是D. Knuth在他的第一个文化编程概念的实现中使用的.
Literate Haskell是否支持索引函数名,类型类和变量引用?是否有一个我可以在Literate Haskell源上运行的过滤器,它将执行此操作,并为我提供一个很好的PDF手册或一个超链接的HTML文档.
这些是noweb和CWEB的一个非常好的功能,我认为它会刺激Literate Haskell的广泛采用.
例如,查看用CWEB编写的单词计数程序.项目#4中第一页上的代码块使用了该代码的使用位置.LHS不支持块,但我想知道代码的使用位置:
评论func.
func = id
用于:(XYZf,ABCg,第1.5节)
func2 = indefined
用于:(ABCx,第2.1节)
此外,还有一个索引,它汇总了所有函数名称和变量,以及它们在文档中引用的位置以及其他函数等.