为有抱负的Lisp新手设置一个有效的Common Lisp环境

时间:2009-07-09 02:05:39

标签: emacs lisp

我很长一段时间以来一直是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,我更喜欢开源解决方案。

7 个答案:

答案 0 :(得分:29)

假设您已经运行了emacs并且已经检出了SLIME CVS并安装它。任何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)

如果您的“网站目录”中没有安装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 PersonalAllegro CL Free Edition。我自己也没有在linux上使用过,但它们似乎都带有GUI。将有堆大小或其他限制(因为完整版本不是免费的),但它们可能更容易深入。

答案 4 :(得分:2)

嗯,一个好的起点是 info 页面的executing lisp部分。

通常,当您在Emacs中使用解释语言时,您可以编辑源文件,并与劣质流程(由Emacs生成的新流程,在本例中为lisp流程)进行交互。您可以通过简单的击键来评估sexp(平衡表达式),区域或整个缓冲区。这些命令将代码发送到lisp进程并对其进行评估。

此用法模型适用于shell,Tcl,lisp,带解释器的任何内容......

wiki has a lot of good information

答案 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

关于您的使用问题:

  • C-x 5 2为您提供第二个播放窗口
  • C-c C-k编译&加载当前缓冲区
  • 内置制表符,但也有其他完成功能。 我个人喜欢C-c M-i模糊完成。
  • jrockway的回答有关于emacs命令的其他好的提示,我在此不再重复

答案 6 :(得分:-2)

我可以说Emacs是一个很好的编写Lisp的环境,因为我在大学里使用过它。 *scratch*缓冲区为测试代码提供了一个好地方。编译器文档应该说如何调用它们,这样你就可以将文件写入磁盘然后在shell窗口中运行它们,或者使用Emacs的一种模式来集成edit-compile-and-run。 (对不起,我不是更具体,已经15年了。)

相关问题