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、 が原因で失敗しxますnil。の呼び出しから名前を削除するとf1、 f2 は機能しますが、 のパラメーターを変更すると、結果は同期されませんf1

結果が計算されるたびに結果の名前を手動で変更する必要なく、関数呼び出しの結果を表示したいことを組織モードに伝えるにはどうすればよいですか?

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」... Literate Programming システムでは、おなじみの Noweb 構文を使用して、名前付きのコード ブロックを参照できます。

<<code-block-name>>

:nowebコード ブロックが絡み合っているか評価されている場合、「noweb」参照が展開されるかどうかは、ヘッダー引数の値に依存します。はいの場合:noweb、Noweb 参照は評価前に展開されます。[...]

本体ではなく、コード ブロックの結果を含めることができます。これは、以下に示すように、オプションでコード ブロックへの引数を含むことができるコード ブロック名に括弧を追加することによって行われます。

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

このセットアップを使用するとx、渡す値をf1変更して、他に何も変更することなく、正常に再エクスポート/再評価できます。

于 2014-06-11T20:54:06.133 に答える