2012-03-07 8 views
2

ob-table.elsbe関数を使用する例はありますか?私はそれがまっすぐなelispで動作するようになっていないので、何かが欠けているに違いない。org-babel sbe構文

| 1 | 2 | 3 | 4 | 
#+TBLFM: @1$4='(sbe add1 (x $3)) 

をしかし、これはしていません::

#+name: add1(x=1) :results silent 
#+begin_src python 
return x + 1 
#+end_src 

これは作品のリストに2を変更

#+begin_src emacs-lisp 
(sbe add1 (x 2)) 
#+end_src 

error: Wrong type argument: sequencep, 2

はちょうどそれをさらに悪化させる:

#+begin_src emacs-lisp 
(sbe add1 (x (list 2)) 
#+end_src 

error: Wrong type argument: buffer-or-string-p, 2

答えて

1

あなたの質問を正しく理解している場合は、テーブルの外で名前付きソースブロックを使用して結果を呼び出そうとしています。

まず、:results silent#+begin_src行に属し、#+nameではありません(直接ブロックを評価した場合のみ)。私はこのマシンにpythonを持っていないので、Pythonからemacs-lispに切り替えるので、そうでなければブロックを評価することはできません。関数は同等のままです。 #+tblfm: @1$4='(sbe add1 (x $3))

あなたの代わりに#+CALL:を使用する必要がテーブルの外のコードブロックを使用して(Evaluating Code Blocksを参照してください):

組織テーブルに
#+name: add1(x=1) 
#+begin_src emacs-lisp :results silent 
    (+ x 1) 
#+end_src 

適切なコマンドを使用すると、使用したものです。例えば

#+CALL: add1(x=2) 

#+RESULTS: add1(x=2) 
: 3 

#+CALL: add1(4) 

#+RESULTS: add1(4) 
: 5 

#+call: add1(add1(2)) 

#+RESULTS: add1(add1(2) 
: 4 

編集(コメントからの回答に追加):

あなたは、単にあなたの数式をクリーンアップし、変更を行うためにそれらを介して読み込むことが良くできるようにしたい場合数式エディタC-c 'を使用すると、セル範囲をより明確に表示したり、セル参照を強調表示したりして、適切な領域を選択できるようになります。

+0

実際、私の '#+ TBLFM'行が少し長くなっているので、emacs lispからソースブロック"関数 "を直接呼び出すことを望んでいました。 – wdkrnls

+0

@wdkrnlsどこに呼びたいと思っていましたか?それがテーブルの一部であれば、ドキュメント内の '#+ TBLFM:'に '#+ CALL:'を使用してください。 –

+0

私は '#+ TBLFM:'の行を、意味のある名前付き関数。私はemacs-lispでこれを行うことができると知っていますが、私は他の言語でこれを行うことができるようにしたいと思います。 – wdkrnls