我非常想开始使用这些工具,但似乎我不够聪明:-(
我花了几个小时阅读文档、移动文件夹和编辑配置文件,但我仍然无法启动 Emacs ...
我使用 emacs、slime 和 sbcl。当条件发生时我被扔进调试器时,如何限制输出的大小?我已经弄清楚了*print-length*和*print-level*,但是对于长字符串或多行字符串该怎么办?说,
(defun monkeys (length)
"Generate a random string"
(with-output-to-string (out)
(dotimes (i length)
(write-char
(code-char
(let ((c (random 27)))
(if (zerop c)
(if (zerop (random 5)) 10 32)
(+ 95 c)))) out))))
(1+ (monkeys 10000)) ; drop into debugger
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过《Common Lisp:符号计算的温和介绍》一书来学习 Common Lisp 。此外,我正在使用 SBCL、Emacs 和 Slime。
在第7章的进阶部分,作者建议使用trace功能。这无疑是一个非常有价值的工具。我很高兴看到它起作用了。
然而,显然,我的工具并不能完全像作者介绍的那样工作。
做如下定义后:
(defun find-first-odd (x)
(find-if #’oddp x))
Run Code Online (Sandbox Code Playgroud)
并在 REPL 上运行:
> (dtrace find-first-odd oddp)
Run Code Online (Sandbox Code Playgroud)
他得到:
> (find-first-odd ’(2 4 6 7 8))
----Enter FIND-FIRST-ODD
| X = (2 4 6 7 8)
| ----Enter ODDP
| | NUMBER = 2
| \--ODDP returned NIL
| ----Enter ODDP
| | NUMBER = 4
| \--ODDP returned NIL
| ----Enter ODDP
| | NUMBER = 6
| \--ODDP …Run Code Online (Sandbox Code Playgroud) 有没有办法探索 Common Lisp 图像的当前状态(即加载的包、可用的符号等)?
我知道命令(apropos "foo"),但我想查看整个图像的当前状态。
有这样的探险家吗?我正在使用 SBCL 和 SLIME(在 Emacs 中)。
假设我使用 swank/slime 连接到远程 Lisp。我的本地计算机上的磁盘上或者 emacs 缓冲区中可能有一个数据文件。我想使用远程 Lisp 处理这个文件。
显然,我可以退出 shell 并将文件 scp 到服务器,加载文件,处理它,关闭,删除文件,这样我就不会在服务器上弄乱。
我还可以将文件粘贴到 repl 中:
> (defparameter *my-file* "[paste file here]")
Run Code Online (Sandbox Code Playgroud)
但如果文本中有引号或者文件是二进制的,这就很糟糕了。
这两种选择都很麻烦。
有没有一种好的方法可以让本地 emacs 将文件通过隧道传输到远程 Lisp,以便远程 Lisp 可以将其作为流打开?
我正在想象这样的事情:
> (swank:with-open-client-file (s #p"/path/to/local/file") ... )
Run Code Online (Sandbox Code Playgroud)
编辑:这个例子感觉它可能会在我的本地文件系统中打开一些漏洞。可以在不造成严重安全问题的情况下完成吗?
在使用Slime repl在Emacs中开发时,我无法重新加载多方法.
重新定义defmethod表单工作正常,但如果我更改调度功能,我似乎无法重新加载defmulti表单.我想我专门添加或删除了调度函数参数.
作为一种解决方法,我已经能够ns-unmap使用multimethod var,重新加载defmulti表单,然后重新加载所有defmethod表单.
据推测,这是Clojure实现多方法的一种"限制",即我们牺牲了一些执行速度的动力,但有没有任何成语或开发实践可以帮助解决这个问题?
在完成Peter Seibel的" Practical Common Lisp"一书时,我在理解如何与Emacs的SLIME和quicklisp一起处理Common Lisp包系统时遇到了一些困难.他提供的项目具有以下结构:
spam.lisp在包中com.gigamonkeys.spam,依赖于另外两个包,cl-ppcre和com.gigamonkeys.pathnames.pathnames.lisp 在包中 com.gigamonkeys.pathnamesspam.asd,它描述了com.gigamonkeys.spam包的依赖关系pathnames.asd,它描述了com.gigamonkeys.pathnames包的依赖关系我目前发现构建最终目标spam.lisp的唯一方法是:
pathnames.asd使用SLIME(C-x C-k)编译并加载文件com.gigamonkeys.pathname通过(asdf:operate 'asdf:load-op 'spam) 在REPL 键入来加载包cl-ppcre通过(ql:quickload "cl-ppcre")在REPL 键入来加载包spam.asd使用SLIME 编译并加载文件com.gigamonkeys.spam通过(asdf:operate 'asdf:load-op 'spam)在REPL 键入来加载包这似乎是使用单个文件中定义的函数所需的大量工作(spam.lisp) - 我必须做错事.是否有一些方法可以spam.lisp用更少的命令加载和递归地加载它的依赖项?
我正在尝试在emacs中设置slime模式以使用常见的lisp.当我尝试开始粘贴时,M-x slime我收到一条错误消息:
process inferior-lisp not running.
所以,我检查了变量的值inferior-lisp-program,结果证明了这一点"/opt/sbcl/bin/sbcl".sbcl是普通lisp实现的首字母缩写,称为钢银行常见的lisp.请注意,此变量在文件中定义slime.el.因为我没有安装在我的机器上的sbcl(我的机器上甚至不存在以前的目录)(运行os x 10.8.3),这不起作用.
我有clisp实现,它位于目录:/opt/local/bin/.我试图通过以下方式更改变量的值inferior-lisp-program:
(setq inferior-lisp-program '/opt/local/bin/clisp/)
但是,这不起作用,我不知道还有什么可以尝试.
编辑:这是一些我认为可能有用的额外信息.如果我尝试通过执行M-x run-lisp从emacs中获取以下输出来在emacs中启动常见的lisp :
(progn (load "/Users/s2s2/.emacs.d/slime/swank-loader.lisp" :verbose t) (funcall \
(read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-s\
erver") "/var/folders/wf/yjgymt8j14v2tqwjnny68wq00000gn/T/slime.28222"))
Can't exec program: /opt/sbcl/bin/sbcl
Process inferior-lisp exited abnormally with code 1
Can't exec program: /opt/sbcl/bin/sbcl
Process inferior-lisp exited abnormally with code 1
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!非常感谢所有帮助!
是否存在关闭emacs中的进程的击键组合?偶尔我在Common Lisp REPL上犯了一个新手错误,我的Emacs锁定了.在Mac上我只是强制退出,因为我无法找到一种方法来控制Emacs.但是如果我能避免它,我宁愿不关闭Emacs.
我最近package-list-packages在Emacs中更新了SLIME .但是,当我尝试使用它时M-x slime,我得到这个:
(progn (load "/home/koz/.emacs.d/elpa/slime-20140913.730/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.3081"))
*
; loading #P"/home/koz/.emacs.d/elpa/slime-20140913.730/swank-loader.lisp"
;;
;; Error while compiling /home/koz/.emacs.d/elpa/slime-20140913.730/swank/backend.lisp:
;; Failed to find the TRUENAME of /home/koz/.emacs.d/elpa/slime-20140913.730/swank/backend.lisp:
;; No such file or directory
;; Aborting.
;; *
Run Code Online (Sandbox Code Playgroud)
之后我仍然有一个REPL,但我认为这很奇怪,我想知道发生了什么以及为什么.
slime ×10
common-lisp ×8
emacs ×6
lisp ×2
sbcl ×2
clojure ×1
elisp ×1
multimethod ×1
quicklisp ×1
trace ×1