org-babel sbe синтаксис
Может ли кто-нибудь привести примеры использования 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 ответ
Если я правильно понимаю ваш вопрос, вы пытаетесь использовать названный исходный блок вне таблиц для запроса результатов.
Прежде всего, ваш :results silent
принадлежит на #+begin_src
линия, а не #+name
(актуально, только если вы когда-либо оцениваете этот блок напрямую). Я переключаюсь на emacs-lisp из python просто потому, что у меня нет python на этой машине, поэтому я не могу оценить блок в противном случае, функция остается эквивалентной.
#+name: add1(x=1)
#+begin_src emacs-lisp :results silent
(+ x 1)
#+end_src
В Org Tables правильная команда - та, которую вы использовали: #+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 '
позволит вам видеть их более четко, а также выделять ссылки на ячейки, чтобы убедиться, что вы выбираете правильные регионы.