评估此代码(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?
答案 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实例 使用。