如何区分org-babel代码块中的方案方言?

时间:2012-02-18 03:28:28

标签: emacs racket org-mode

评估此代码(C-c C-c):

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

导致以下babel错误:

ERROR: Unbound variable: andmap

原因:babel使用Guile而不是Racket评估代码。如何告诉Babel使用Racket执行代码,而不是Guile?

1 个答案:

答案 0 :(得分:2)

http://terohasu.net/blog/2011-09-08-on-racket-support-in-emacs-org-mode.html描述了一种方式:

  

配置Emacs进行设置时,我不熟悉Babel   或者用于评估Emacs下的Scheme代码的任何解决方案   那件事。看了一下Babel和Inferior Lisp后,   我没有设法让Babel调用Racket来评估a   代码清单。相反,我使用替换巴别代码   方案支持(在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)
      )))
     

此解决方案为每次评估创建一个新的Racket实例,并且   因此不如基于Inferior Lisp的解决方案(或   类似的,但它的工作原理,更直接,避免了Racket问题   例如指定用于评估代码的正确模块上下文,   并且评估上下文总是“干净”作为新的Racket实例   使用。

相关问题