标签: slime

sbcl在第二次调用函数时永远运行

功能:

给定列表lst返回列表的内容的所有排列,其长度为k,如果未提供,则默认为列表的长度.

(defun permute (lst &optional (k (length lst)))
  (if (= k 1)
   (mapcar #'list lst)
   (loop for item in lst nconcing
     (mapcar (lambda (x) (cons item x)) 
             (permute (remove-if (lambda (x) (eq x item)) lst) 
                      (1- k))))))
Run Code Online (Sandbox Code Playgroud)

问题:我在连接到sbcl的emacs中使用SLIME,我还没有做太多的自定义.该功能在较小的输入上工作正常,例如lst ='(1 2 3 4 5 6 7 8)k = 3,这在实践中主要用于它.但是,当我连续两次使用大输入调用它时,第二个调用永远不会返回,而sbcl甚至不会显示在顶部.这些是REPL的结果:

CL-USER> (time (nth (1- 1000000) (permute '(0 1 2 3 4 5 6 7 8 9))))
Evaluation took:
12.263 seconds of real time
12.166150 seconds of total run time (10.705372 user, …
Run Code Online (Sandbox Code Playgroud)

lisp recursion sbcl common-lisp slime

6
推荐指数
1
解决办法
594
查看次数

在Emacs上同时运行Clojure和其他Lisp

我使用Aquamacs,而Aquamacs预先配备了SLIME.

(setq inferior-lisp-program "/usr/local/bin/sbcl") #####!!!
(add-to-list 'load-path "/Library/Application Support/Aquamacs Emacs/SLIME/contrib")
(add-to-list 'load-path "/Library/Application Support/Aquamacs Emacs/SLIME")
(require 'slime)
(slime-setup)
Run Code Online (Sandbox Code Playgroud)

正如在某处所要求的那样,我尝试通过添加此代码来使用Clojure.

(add-to-list 'load-path "~/clojure/clojure-mode")
(setq inferior-lisp-program "/Users/smcho/bin/clj") ################
(require 'clojure-mode)
(setq auto-mode-alist
  (cons '("\\.clj$ . clojure-mode")
     auto-mode-alist))
(add-hook 'clojure-mode-hook
  '(lambda ()
     (define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)))
)
Run Code Online (Sandbox Code Playgroud)

我无法使用SLIME运行Clojure,但我对当前设置感到满意,唯一的问题是因为(setq inferior-lisp-program ...)代码,我必须.emacs根据我使用Clojure或SBCL来更改代码.

有什么方法可以解决这个问题吗?我可以选择多个(劣质)Lisps吗?

添加

我可以让Clojure在Aquamacs上运行.有关Aquamacs问题,请参阅带有'lein swank'的Running Clojure.忘记上面写的设置,如果你想运行Aquamacs/Clojure.你只需要一行,(slime-setup '(slime-repl))lein swank.

lisp emacs clojure slime

6
推荐指数
1
解决办法
1128
查看次数

使用swank/slime了解Clojure中的输出

当我在emacs中从Swank repl运行Clojure代码时,主线程将使用printf将消息打印到repl.但是如果我运行代理或显式创建其他也打印的线程,有时输出不会显示,有时它会显示在我运行Swank的控制台窗口中.我很想知道为什么.

编辑:感谢丹尼尔的回答下面我现在知道了其他线程不必绑定到REPL的输出.此代码有效,因为您从运行的位置传出.但是我的新问题是这个代码现在阻塞每个线程,所以不是并行运行,而是每次运行一个线程,所以我需要一个更多线程感知的输出方法.

(defn sleeper-thread [out id t]
  "Sleep for time T ms"
  (binding [*out* out]
    (printf "%d sleeping for time %d\n" id t)
    (Thread/sleep t)
    (printf "%d slept\n" id)))

(defn test-threads [n out]
  (dotimes [x n]
    (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand-int 5000)))))))
Run Code Online (Sandbox Code Playgroud)

printf multithreading clojure slime

6
推荐指数
1
解决办法
556
查看次数

如何在SLIME中捕获代理的stdout/log输出?

我将一个任务发送给代理,但是看不到我放入函数的任何打印语句的输出.如何在代理上跟踪代码执行?

编辑:原来我在控制台中的输出,而不是在泥.现在的问题是,如何在SLIME中看到输出?

clojure slime swank

6
推荐指数
1
解决办法
1005
查看次数

如何定义swank服务器应该收听的地址?

启动swank服务器时,没有设置要绑定的地址的参数:

* (describe 'swank:create-server) 
=> ...
   Lambda-list: (&KEY (PORT DEFAULT-SERVER-PORT)
                (STYLE *COMMUNICATION-STYLE*) (DONT-CLOSE *DONT-CLOSE*)
                (CODING-SYSTEM *CODING-SYSTEM*))

...
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

lisp common-lisp slime swank

6
推荐指数
1
解决办法
1012
查看次数

如何一起使用vimclojure和SLIMV?

两个插件都有良好的侧面,SLIMV有更好的REPL(比vimclojure REPL更快),但vimclojure的缩进和语法着色更好(同样,vimclojure的语法着色也在REPL中工作).而vimclojure的缩进更好.例如,这是函数的SLIMV缩进:

(defn func
      [])
Run Code Online (Sandbox Code Playgroud)

这是vimclojure的:

(defn func
   [])
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用两个插件,每个插件都有良好的侧面.我需要在SLIMV REPL和vimclojure缩进中进行语法着色.你有什么想法我该怎么做?

vim clojure slime vimclojure slimv

6
推荐指数
1
解决办法
1313
查看次数

使用leiningen为clojure设置emacs/slime/swank

短版本:使用lein swank启动swank服务器时运行Mx slime-connect或Mx clojure-jack-in时出错.

我在Ubuntu 10.10上使用emacs 24.0.50.1.我在ELPA的emacs中安装了以下软件包:clojure-mode,paredit,slime,slime-repl

我从github安装了leiningen并将其添加到类路径中,然后运行 lein plugin install swank-clojure 1.3.3.之后我创建了一个新的目录〜/ tmp /,cd进入它并运行: lein new test-project这似乎设置一切正常.然后我在emacs中打开了/tmp/new-project/project.clj并将其更改为:

(defproject test-project "1.0.0-SNAPSHOT"
:description "Test Project"
:dependencies [[org.clojure/clojure "1.2.1"]
               [org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.3.3"]])
Run Code Online (Sandbox Code Playgroud)

在那之后我又回到在/ tmp /新项目文件夹,跑lein deps然后lein swank下载依赖关系,并开始这给输出斯旺克服务器:

Connection opened on local port 4005.
Run Code Online (Sandbox Code Playgroud)

回到emacs是我遇到连接到swank服务器的问题.我试过打开core.clj文件并运行M-x slime-connect它会产生错误:

Symbol's function definition is void: define-slime-contrib
Run Code Online (Sandbox Code Playgroud)

这让我觉得它或者看不到swank服务器正在运行,或者有一些配置需要为它查看服务器.我也尝试过(打开同一个文件并打开project.clj)M-x clojure-jack-in我假设尝试在项目文件夹中启动clojure REPL但是它提供了以下内容:

Debugger entered--Lisp error: (error "Could not start swank server: sh: lein: not found
")
signal(error ("Could …
Run Code Online (Sandbox Code Playgroud)

emacs clojure slime swank leiningen

6
推荐指数
1
解决办法
4338
查看次数

Emacs中的Clojure文档

是否可以在Emacs中查看Clojure功能文档?也就是说,我可以配置Emacs来查找光标下的Clojure函数吗?

我正在使用clojure-mode和SLIME.奇怪的是,我甚至无法使用aproposdir在SLIME的repl中,尽管它们是自动加载的lein repl.

emacs clojure slime

6
推荐指数
1
解决办法
1055
查看次数

学习Emacs/Slime艰难的方式(从Vim的10年)

这是一个真正的问题,不是为了开始一场火焰战争.

我使用Vim超过10年了; 看着人们使用Emacs/Slime ......让我决定学习Emacs/Slime.

我想尽快加快速度:

  • 我本能地做了一堆"手指宏" - 我想找出Emacs/Slime中的等价物并重新训练自己

  • 由于我熟悉Clojure,编写elisp配置不会有问题(有时减去动态变量)

我应该阅读/记忆什么?

编辑:注意,我尝试过VimClojure,并决定更喜欢Slime/Swank.

vim emacs clojure slime

6
推荐指数
1
解决办法
2396
查看次数

我可以在Slime中使用正在运行的线程(Swank Emacs)

我经常发现自己从REPL开始一个长时间运行的过程,然后希望我可以在运行时继续使用REPL执行其他任务.我可以使用slime来设置当前线程或启动一个新的REPL控制线程吗?启动一个额外的REPL缓冲区也没问题.

lisp emacs clojure slime swank

6
推荐指数
1
解决办法
315
查看次数