clojure.contrib与slime和inferior-lisp-program问题

时间:2010-11-28 19:30:06

标签: emacs clojure slime

我从slime repl中找到以下内容(未找到clojure.contib函数):

M-X slime
user=> (:require 'clojure.contrib.string)
nil
user=> (doc clojure.contrib.string/blank?)
java.lang.Exception: Unable to resolve var: clojure.contrib.string/blank? in this context (NO_SOURCE_FILE:10)

以下从控制台启动clojure时(但这里找到的一切都好):

adr@~/clojure/cloj-1.2$ java -cp /home/adr/clojure/cloj-1.2/clojure.jar:/home/adr/clojure/cloj-1.2/clojure-contrib.jar -server clojure.main
user=> (:require 'clojure.contrib.string)
nil
user=> (doc clojure.contrib.string/blank?)
-------------------------
clojure.contrib.string/blank?
([s])
  True if s is nil, empty, or contains only whitespace.
nil

在我的.emacs中,我有以下内容:

(setq inferior-lisp-program "java -cp /home/adr/clojure/cloj-1.2/clojure.jar:/home/adr/clojure/cloj-1.2/clojure-contrib.jar -server clojure.main")

我的clojure罐子(1.2)位于'/home/adr/clojure/cloj-1.2'。

我是emacs的新手,一直在关注一些教程。有一段时间我一直试图使用Emacs的clojure.contrib库,但“M-X slime”找不到clojure.contrib。请帮忙

编辑:如果这会有所帮助,现在我看到使用M-X史莱姆时会有消息:

(progn (load "/home/adr/.emacs.d/elpa/slime-20100404/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.4493" :coding-system "iso-latin-1-unix"))

Clojure 1.2.0
user=> java.lang.Exception: Unable to resolve symbol: progn in this context (NO_SOURCE_FILE:1)

Edit2:但是如果我在目录中启动了“lein swank”之后使用MX slime-connect,则没有这样的错误消息(尽管即使以“MX slime-connect”开头也有REPL中没有找到clojure-contrib库(尽管leiningen将它们作为依赖项下载)。

2 个答案:

答案 0 :(得分:1)

这一行:

(progn (load "/home/adr/.emacs.d/elpa/slime-20100404/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.4493" :coding-system "iso-latin-1-unix"))

是Common Lisp,而不是Clojure,但由于您将inferior-lisp-program设置为Clojure,slime无法启动swank服务器。

请参阅swank-clojure project中的以下部分:

  • 使用SLIME连接
  • 嵌入
  • 斯旺克-clojure.el

您想要的功能可能在swank-clojure.el,但不建议再使用。

因为你已经在使用ELPA:

add-to-list 'package-archives
         '("technomancy" . "http://repo.technomancy.us/emacs/") t)

M-x package-install ;(slime-repl)
M-x slime-connect

答案 1 :(得分:1)

在我看来,我使用错误的方式在REPL中“需要”库(由于我对clojure缺乏经验);使用如下语法时:

user=> (require 'clojure.contrib.string)
nil
user=> (clojure.contrib.string/blank? "asd")
false

所有库都被找到了(无论是使用“M-X slime”进行非swank REPL还是使用“M-X slime-connect”进行swank服务器)。所以这完全是我的错误(我在这个stackoverflow答案中找到了关于我的错误的提示:Why do I get an error when I run (use 'clojure.contrib.repl-utils)?