Как я могу различить диалекты схемы в блоках кода Org-Babel?
Вопрос
Оценка этого кода (CC CC):
#+begin_src scheme
(andmap + '(1 2 3) '(4 5 6))
#+end_src
приводит к следующей ошибке Babel:
ERROR: Unbound variable: andmap
Причина: Бабель оценил код с помощью кила, а не ракеткой. Как я могу сказать Babel выполнить код, используя ракетку, а не в хитрости?
Решение
http://terohasu.net/blog/2011-09-08-on-racket-support-in-emacs-org-dode.html описывает способ:
При настройке EMACS для настройки, я не знаком с Вавилом или с любым из решений для оценки кода схемы в рамках EMACS в этом отношении. После того, как несколько посмотрели на Вавилон и Низкий лиспМне не удалось настроить Babel для вызова ракетки для оценки списка кода. Вместо этого я прибегал к замене кода Babel для поддержки схемы (в ob-scheme.el) в основном только следующим кодом:
(defun org-babel-execute:scheme (body params) (let* ((tangle (cdr (assoc :tangle params))) (script-file (if (string-equal tangle "no") (org-babel-temp-file "org-babel-" ".rkt") tangle))) (with-temp-file script-file (insert body)) (let* ((pn (org-babel-process-file-name script-file)) (cmd (format "racket -u %s" pn))) (message cmd) (shell-command-to-string cmd) )))
Это решение создает новый экземпляр ракетки для каждой оценки и, следовательно, не так эффективно, как решение, основанное на LISP (или аналогичное), но он работает, является более простым, избегает таких проблем с ракеткой, как определение правильного контекста модуля для оценки кода и контекст оценки всегда «чистый», как используется новый экземпляр ракетки.