4

我正在使用 emacs org 模式进行可重复的研究。我无法将调用结果链接到代码块。作为我正在尝试做的一个最小示例:

* Functions
#+name: f1
#+begin_src elisp :var x=7
  (+ x x)
#+end_src

#+name: f2
#+begin_src elisp :var x=7
  (+ x 2)
#+end_src

* Data
#+name: intermediate
#+call: f1(x=5)

#+RESULTS: intermediate
: 10

#+call: f2(x=intermediate)

当我打电话时f2,它失败了,因为xis nil。如果我从 on 调用中删除名称f1,则 f2 可以工作,但如果我更改f1.

如何告诉 org 模式我想查看函数调用的结果,而无需在每次计算结果时手动重命名?

4

1 回答 1

4

您可以通过在标题下的计算中使用Noweb参考语法来实现您想要的Data

* Functions
...

* Data
#+name: intermediate
#+BEGIN_SRC elisp :noweb yes
<<f1(x=5)>>
#+END_SRC

#+BEGIN_SRC elisp :noweb yes
<<f2(x=intermediate)>>
#+END_SRC

手册(强调我的):

“noweb” ... 文学编程系统允许使用熟悉的 Noweb 语法来引用命名的代码块:

<<code-block-name>>

当一个代码块被纠缠或评估时,“noweb”引用是否被扩展取决于:nowebheader 参数的值。如果:noweb是,则在评估之前扩展 Noweb 参考。[...]

可以包含代码块而不是正文的结果。这是通过将括号附加到代码块名称来完成的,代码块名称可以选择包含代码块的参数,如下所示。

<<code-block-name(optional arguments)>>

使用此设置,您可以更改x要传递的值f1并成功重新导出/重新评估,而无需修改其他任何内容。

于 2014-06-11T20:54:06.133 回答