我很长一段时间以来一直是UNIX系统管理员,除了使用shell脚本自动执行任务,一些简单的PHP工作以及一些简单的C程序之外,我从未在编程方面做过多少工作。我最近决定放松一下,学习Common Lisp。
我已经走过了Touretzky的“Gentle Intro”,刚刚到达I / O章节,我想在阅读书籍和练习时,不仅要在REPL中输入内容。问题是我无法找到一个体面的工作环境来获得体面的工作环境。
我已经安装了emacs(这本身就是一个艰难的变化,因为我已经使用了近20年的vi),SLIME和几个CL实现。然而,这些作品中的任何一个的文档都是巨大的,永远不要试图涉及这三个部分。我已经浏览了几本免费的在线CL书籍,并且所有这些书都与环境无关,假设您将在REPL中输入内容或加载源文件。
如果我能找到一个体面的介绍来为Common Lisp设置一个Emacs环境,允许我在一个窗口中以Lisp模式进行编辑(函数和变量自动完成会非常好),这真的会让这次体验更加愉快在这里,看到在另一个中评估单个表达式(输出和返回值)的结果,以及能够在我看到某个地方的结果时告诉整个缓冲区被评估和“运行”。
任何和所有指针都将非常感激。
编辑:我的平台是FreeBSD / amd64,我更喜欢开源解决方案。答案 0 :(得分:29)
假设您已经运行了emacs并且已经检出了SLIME
CVS并安装它。任何Linux发行版都应该很容易; apt-get install emacs slime
为我做了。 (您还应该安装SBCL,最好的Common Lisp实现。)
~/.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)
如果您的“网站目录”中没有安装SLIME,那么您将会这样做 也希望在这些行之前添加:
(add-to-list 'load-path "~/elisp/slime/")
(add-to-list 'load-path "~/elisp/slime/contrib")
(当然,将这些路径更改为正确的位置。)
关键部分是粘液设置,这会加载各种可选项 模块,包括REPL。 (我也考虑花哨的缩进, 和autodoc必不可少。)
无论如何,您可以使用M-x
eval-buffer
将其加载到正在运行的emacs中,或者将该点放在每个性别中并按下
C-M-x
。 (您也可以指向性别的结尾并按C-x
C-e
。有多种方法可以评估Emacs中的Emacs Lisp,
但这与学习CL无关。)
此时,您应该能够输入M-x slime
并被带到
你的REPL。在此之前,你的lisp将被加载,SLIME将
告诉它编译Swank(SLIME的CL方面),你会看到它
发生。但这只会发生一次,下次SLIME会启动
更快。
在REPL中,您可以键入Common Lisp命令并查看结果 他们的评价。按TAB完成某事会产生一个 可能完成的窗口;这是聪明的完成,所以打字 像“d-b”这样的东西会显示一个包含的列表 “解构绑定”。很有帮助。 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))
您可以通过各种方式将此函数加载到正在运行的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时可以使用的完整命令列表。你可以点击
获取有关每个功能的更多信息的链接。
玩得开心!
答案 1 :(得分:5)
不要因为很多人喜欢史莱姆而放弃Vi / Vim。
我之前在SO上写过这篇文章。看看这些:
我很乐意在这里回答具体问题。
答案 2 :(得分:3)
您是否尝试过Lispbox?
答案 3 :(得分:3)
Lispbox& SLIME是很好的答案,但如果你想要更简单的东西,只是为了玩,你可以考虑免费版LispWorks Personal或Allegro CL Free Edition。我自己也没有在linux上使用过,但它们似乎都带有GUI。将有堆大小或其他限制(因为完整版本不是免费的),但它们可能更容易深入。
答案 4 :(得分:2)
嗯,一个好的起点是 info 页面的executing lisp部分。
通常,当您在Emacs中使用解释语言时,您可以编辑源文件,并与劣质流程(由Emacs生成的新流程,在本例中为lisp流程)进行交互。您可以通过简单的击键来评估sexp(平衡表达式),区域或整个缓冲区。这些命令将代码发送到lisp进程并对其进行评估。
此用法模型适用于shell,Tcl,lisp,带解释器的任何内容......
答案 5 :(得分:2)
设置Lisp环境的方法有很多种,从手动方法到开箱即用的安装程序。
以下答案适用于clbuild,它始终为您下载所有套餐的全新版本:
假设您已经安装了Emacs和SBCL,以下内容将启动并运行SLIME。 (你还需要bash,darcs,CVS等,但据我所知,FreeBSD端口包括所有这些。)
$ darcs get --set-scripts-executable http://common-lisp.net/project/clbuild/clbuild
$ ./clbuild/clbuild install slime
$ ./clbuild/clbuild slime
您不必(实际上,不应该)修改您的.emacs。如果您之前使用过手动安装SLIME,请清除.emacs中的旧更改。 clbuild为你设置了粘液。
如果您愿意,clbuild还可以为您获取并构建最近的SBCL:
$ ./clbuild/clbuild install sbcl
$ ./clbuild/clbuild compile-implementation sbcl
# afterwards you can uninstall the FreeBSD-provided Lisp used for bootstrapping
关于您的使用问题:
答案 6 :(得分:-2)
我可以说Emacs是一个很好的编写Lisp的环境,因为我在大学里使用过它。 *scratch*
缓冲区为测试代码提供了一个好地方。编译器文档应该说如何调用它们,这样你就可以将文件写入磁盘然后在shell窗口中运行它们,或者使用Emacs的一种模式来集成edit-compile-and-run。 (对不起,我不是更具体,已经15年了。)