我经常使用基于特定定义算法的代码.这得到了很好的评论,似乎是正确的.对于大多数数据集,算法运行良好.
但随后边缘情况,特殊情况,启发式方法被添加以解决特定数据集的特定问题.随着特殊情况的数量增加,评论越来越模糊.我担心在一年左右的时间内回过头来查看这段代码并试图记住为什么会添加每个特殊的特例或启发式.
我有时希望有一种方法可以在源代码中嵌入或链接图形,所以我可以有效地说,"在这个数据集的图形中,这个特殊功能导致例程不正确地触发,所以这就是为什么这个代码被添加".
处理这种情况的最佳做法是什么?
似乎总是需要特殊情况来处理这些异常/边缘情况.如何管理它们以使代码保持相对可读性和可理解性?
考虑一个处理照片特征识别的例子(不完全是我正在研究的,但类比似乎很合适).当我找到一般算法失败并且需要特殊情况的特定图片时,我尽可能地在评论中记录该信息(或者如下面的某人建议的描述性函数名称).但是经常缺少的是指向展示相关行为的特定数据文件的永久链接.虽然我的评论应该描述这个问题,并且可能会说"请参阅文件foo.jp以获取此行为的示例",但此文件永远不会出现在源代码树中,并且很容易丢失.
在这种情况下,人们是否会将数据文件添加到源树中以供参考?
我目前正在写很多小报道.其中大多数只是价值转储,包含一些图表和说明性评论.
是否有一个有文化的编程环境,让我以简单的格式(最好是markdown/latex和haskell)编写我的报告,然后转换为某种输出格式(最好是pdf),其中包含在原始文件中完成的计算结果?
我知道Haskell支持有文化的编程,但我不认为可以捕获输出(可能还有整个图像).
我正在努力寻找一个好的文字编程工具.我们只是说这不是一个简单的决定.(通用的太通用了,具体的太具体了:))
在其他方面,我已经noweb起步并运行,但我很难获得像我期望的输出.在noweb 维基百科页面有与正确建立一个小例子,
noweave -index -latex hello.noweb > hello.tex && pdflatex hello && pdflatex hello
Run Code Online (Sandbox Code Playgroud)
但每个块的末尾没有交叉引用.例如,CWEB有指针,例如"此代码在第12节中使用".和"另见第5和第7节".这个功能是否完全缺失,noweb或者我是否错过了编译中的一个步骤?
我正在使用Emacs 23和Org 7.8.04.我的代码结构如下:
#+TITLE: hello, world!
#+BEGIN_SRC python :tangle yes :noweb yes
<<go_function>>
if __name__ == "__main__":
go()
#+END_SRC
Define =go_function= as follows.
#+name:go_function
#+BEGIN_SRC python
def go:
print "hello, world!"
#+END_SRC
Run Code Online (Sandbox Code Playgroud)
当我尝试编写文档时,<<go_function>>第一个代码块中的第一个代码块也被导出为html,因此我有两个html导出<<go_function>>.我希望将 <<go_function>>导出为链接,指向文档末尾的实际定义.我该怎么做?
我有一个识字的haskell文件,并希望使用条件编译.我使用文字编程的鸟类风格.以下代码不起作用.
> #if MIN_VERSION_base(4,6,0)
> import Control.Exception
> #endif
Run Code Online (Sandbox Code Playgroud)
我需要一个cabal 1.14.0的解决方案
编辑:
cpphs有一个选项--unlit可以取消识别源代码,但我不知道如何将此选项传递给cabal中的cpphs.
我无法在lhs风格的haskell程序中注释出代码行,所以haskell和Latex都忽略了这一行.
当我使用时,--我的lh2tex将尝试将haskell代码渲染为注释.但这通常会失败,因为代码中包含美元和其他令Latex混淆的东西.
当我使用时--%,Latex很高兴,因为它只是忽略了评论,但是haskell不喜欢--%.只有当我在--哈斯克尔之后放一个空格时才可以,但乳胶再次抱怨.
是否可以使用其他#langs in#lang scribble/lp进行文学编程?
例如,我想#lang typed/racket在#lang scribble/lp. 如何意识到这一点?
在 Org 模式下编写文学程序时,导出类似于在早期的文学编程工具(如 cweb 或 noweb)中编织。这些工具会将代码块名称添加到编织(导出)输出中。在 Org 模式下,它看起来像这样:
组织文件:
#+NAME: mycodeblock
#+BEGIN_SRC language
[Source code here]
#+END_SRC
Run Code Online (Sandbox Code Playgroud)
导出的输出:
<mycodeblock>=
[Source code here]
Run Code Online (Sandbox Code Playgroud)
我想知道 Org 模式是否支持以这种方式导出代码块的名称。如果没有,有没有办法至少将代码块的名称输出为某种标签?
我已经看到可以导出代码块名称的提示,但我没有找到确切的语法。