org-babel sbe синтаксис - PullRequest
       27

org-babel sbe синтаксис

2 голосов
/ 07 марта 2012

Кто-нибудь может привести примеры использования функции sbe в ob-table.el? Должно быть, я что-то упустил, потому что я не смог заставить его работать с обычным elisp.

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

Это работает:

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

Но это не так:

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

ошибка: неверный аргумент типа: sequencep, 2

Смена 2 на список только усугубляет его:

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

ошибка: неверный аргумент типа: буфер-или-строка-р, 2

1 Ответ

1 голос
/ 07 марта 2012

Если я правильно понимаю ваш вопрос, вы пытаетесь использовать названный исходный блок вне таблиц для запроса результатов.

Прежде всего, ваш :results silent принадлежит строке #+begin_srcа не #+name (актуально, только если вы когда-либо оцениваете этот блок напрямую).Я переключаюсь на emacs-lisp из python просто потому, что у меня нет python на этой машине, поэтому я не могу оценить блок в противном случае, функция остается эквивалентной.

#+name: add1(x=1)
#+begin_src emacs-lisp :results silent
  (+ x 1)
#+end_src

В таблицах Org правильная командаэто тот, который вы использовали: #+tblfm: @1$4='(sbe add1 (x $3))

При использовании блоков кода вне таблиц вы должны использовать #+CALL: вместо этого (см. Оценка блоков кода ).

Дляпример:

#+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 ' позволит вам увидеть их более четко, а также выделит ссылки на ячейки, чтобы убедиться, что вы выбираете правильные области.

...