Как я могу различить диалекты схемы в блоках кода org-babel? - PullRequest
2 голосов
/ 18 февраля 2012

Оценка этого кода (Cc Cc):

#+begin_src scheme
(andmap + '(1 2 3) '(4 5 6))
#+end_src

приводит к следующей ошибке babel:

ERROR: Unbound variable: andmap

Причина: babel оценил код с Guile вместо Racket.Как я могу сказать Babel выполнять код, используя Racket, а не Guile?

1 Ответ

2 голосов
/ 18 февраля 2012

http://terohasu.net/blog/2011-09-08-on-racket-support-in-emacs-org-mode.html описывает способ:

При настройке Emacs для настройки я не был знаком с Babel или любое из решений для оценки кода Схемы в Emacs для это важно. После некоторого взгляда на Вавилона и Inferior Лисп , Мне не удалось настроить Babel для вызова Racket для оценки листинг кода Вместо этого я прибег к замене кода Вавилона на Поддержка схемы (в ob-sche.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)
      )))

Это решение создает новый экземпляр Racket для каждой оценки, и следовательно, не так эффективно, как решение на основе Inferior Lisp (или похоже), но это работает, более просто, избегает проблем с ракеткой такие как указание правильного контекста модуля для оценки кода, и контекст оценки всегда «чистый», как новый экземпляр Racket используется.

...