我很长一段时间以来一直是UNIX系统管理员,除了使用shell脚本自动执行任务,一些简单的PHP工作以及一些简单的C程序之外,我从未在编程方面做过多少工作.我最近决定稍微放松一下,学习Common Lisp.
我已经走过Touretzky的"Gentle Intro"了,刚刚到达I/O的章节,我想要在阅读书籍和练习时不仅要在REPL中输入内容.问题是我无法找到一个体面的howto/tutorial来获得一个像样的工作环境.
我已经安装了emacs(这本身就是一个艰难的变化,因为我已经使用了近20年的vi),SLIME和几个CL实现.然而,这些作品中的任何一个的文档都是巨大的,永远不要试图涉及这三个部分.我已经浏览了几本免费的在线CL书籍,所有这些书都与环境无关,假设你要在REPL中输入内容或加载源文件.
如果我能找到一个体面的介绍来为Common Lisp设置Emacs环境,允许我在一个窗口中以Lisp模式编辑(函数和变量自动完成在这里真的很不错),这真的会让这次体验更加愉快.看到在另一个中评估单个表达式(输出和返回值)的结果,以及能够在我看到某个地方的结果时告诉整个缓冲区被评估和"运行".
任何和所有指针将不胜感激.
编辑:我的平台是FreeBSD/amd64,我更喜欢开源解决方案.
jro*_*way 29
假设您运行了emacs并从CVS检出了SLIME并安装了它.任何Linux发行版都应该很容易; apt-get install emacs slime这对我来说.(您还应该安装SBCL,最好的Common Lisp实现.)
开箱即用的SLIME不再需要太多,所以它需要配置.配置emacs在您的~/.emacs文件中完成.访问该文件(C-x C-f ~/.emacs).我有类似的东西,它加载了各种好东西:
(eval-after-load "slime"
'(progn
(setq slime-lisp-implementations
'((sbcl ("/usr/bin/sbcl"))
(ecl ("/usr/bin/ecl"))
(clisp ("/usr/bin/clisp"))))
(slime-setup '(
slime-asdf
slime-autodoc
slime-editing-commands
slime-fancy-inspector
slime-fontifying-fu
slime-fuzzy
slime-indentation
slime-mdot-fu
slime-package-fu
slime-references
slime-repl
slime-sbcl-exts
slime-scratch
slime-xref-browser
))
(slime-autodoc-mode)
(setq slime-complete-symbol*-fancy t)
(setq slime-complete-symbol-function
'slime-fuzzy-complete-symbol)))
(require 'slime)
Run Code Online (Sandbox Code Playgroud)
如果您的"站点目录"中没有安装SLIME,您还需要在这些行之前添加:
(add-to-list 'load-path "~/elisp/slime/")
(add-to-list 'load-path "~/elisp/slime/contrib")
Run Code Online (Sandbox Code Playgroud)
(当然,将这些路径更改为正确的位置.)
关键部分是粘液设置,它加载了各种可选模块,包括REPL.(我也考虑花哨的缩进,而autodoc必不可少.)
无论如何,您可以将其加载到正在运行的emacs中M-x
eval-buffer,或者将该点放在每个sexp内并按下
C-M-x.(你也可以指向sexp的结尾并按下C-x
C-e.有很多种方法来评估Emacs中的Emacs Lisp,但这与学习CL并不相关.)
此时,您应该可以输入M-x slime并转到REPL.在此之前,你的lisp将被加载,SLIME会告诉它编译Swank(SLIME的CL端),你会看到这种情况发生.但这只会发生一次,下次SLIME启动速度会更快.
在REPL中,您可以键入Common Lisp命令并查看其评估结果.按TAB完成某些操作将打开一个可能完成的窗口; 这是智能完成,因此输入类似"db"的内容将显示包含"destructuring-bind"的列表.很有帮助.M- /还将完成您已经在Emacs内部输入的符号; 另一个很好的节省时间.(这在Emacs,BTW中无处不在,被称为"动态缩写扩展".)
之前你说过REPL很无聊,所以让我们打开一个真正的文件.按C-x C-f test.lisp.毫不奇怪,这将打开一个缓冲区编辑test.lisp,它将在您第一次保存文件时创建(C-x C-s).这个Lisp文件知道SLIME,因此运行的Lisp可以轻松验证您键入的任何内容.标签完成,类检查,交互式测试等都可用.
例如,键入类似的内容(+ 1 2)并按C-x C-e.您将在窗口底部看到由运行的Lisp评估的结果.这使您可以在将单个表达式键入文件时对其进行测试.
下一步是编写一个完整的函数,也许:
(defun my-1+ (x)
(+ x 1))
Run Code Online (Sandbox Code Playgroud)
您可以通过各种方式将此函数加载到正在运行的Lisp中; 我经常使用C-M-x.您现在可以更改回REPL缓冲区(C-x b *slime-repl sbcl*或类似)并键入(my-1+ 42)并查看43打印的结果.
将函数引入正在运行的Lisp的另一种方法是使用编译和加载整个文件C-c C-k.
无论如何,这是使用SLIME和Emacs的基础知识.显然有更多的功能,但这应该让你尝试使用SLIME进行Lisp编程.我要提到的最后一件事,Emacs主要是自我记录,所以如果你想了解更多,Emacs可以帮助你.在Lisp缓冲区中,您可以键入C-h m以获取编辑Lisp时可以使用的完整命令列表.您可以单击链接以获取有关每个功能的更多信息.
玩得开心!
不要因为很多人喜欢Slime而放弃Vi/Vim.
我之前在SO上写过这篇文章.看看这些:
我很乐意在这里回答具体问题.
| 归档时间: |
|
| 查看次数: |
6003 次 |
| 最近记录: |