我从自动化与shell脚本,一些轻PHP的工作,和一些简单的C程序的任务一直是UNIX系统管理员很长一段时间,而一旁,我从来没有在节目的方式做了很多工作。 我最近决定伸出我的脑子有点和学习的Common Lisp。
我中途通过Touretzky的“温柔介绍”和,刚刚达到一章I / O,我希望得到超越打字的东西进入REPL,因为我走过书和练习。 问题是,我无法找到要找一份体面,工作环境像样的HOWTO /教程。
我已经安装了Emacs(这本身就是一个艰难的变化,因为我用六将近20年),泥和几个CL实现。 然而,对于这些作品中的任何一个文件是巨大的,不要介意试图通过所有三个涉水。 我有几个脱脂免费在线CL书,所有的人都不可知的环境,假设你会打字的东西到REPL或加载源文件。
这将真正使这方面的经验更愉快,如果我能找到一个体面的介绍来设置为Common Lisp的Emacs的环境,让我在一个窗口LISP方式编辑(函数和变量自动完成将是非常好的这里)看在评估另一单个表达式(输出和返回值)的结果,以及能够告诉被评估整个缓冲区和“运行”,而我看到的结果某处。
任何及所有指针将不胜感激。
编辑:我的平台是FreeBSD的/ AMD64和我喜欢的开源解决方案。
让我们假设你有emacs的运行,并且已经从CVS签出泥并安装它。 这应该是很容易与任何Linux发行版; apt-get install emacs slime
做对我来说。 (您还应该安装SBCL,最好的Common Lisp实现。)
泥开箱没有做太多了,所以它需要的配置。 配置Emacs是在你做~/.emacs
文件。 访问该文件( Cx Cf ~/.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)
如果您没有安装泥在你的“站点目录”不,你还需要这些行之前,补充一点:
(add-to-list 'load-path "~/elisp/slime/")
(add-to-list 'load-path "~/elisp/slime/contrib")
(更改这些路径到正确的位置,当然)。
的关键部分是煤泥设置,此加载多种可选模块,包括REPL的。 (我也考虑看中缩进和车博士是必不可少的。)
无论如何,你可以加载到正在运行的Emacs本Mx eval-buffer
,或将每个SEXP内的点,然后按CMx
。 (您也可以指向SEXP并按年底Cx Ce
。有多种方式来评估的Emacs Lisp在Emacs,而不是学习CL真正相关的。)
此时,你应该能够键入Mx slime
和被带到你的REPL。 之前出现这种情况,你的口齿不清将被加载,泥会告诉它来编译斯旺克(泥的CL侧),你会看到这种情况发生。 这只是发生一次,不过,下一次将泥更快地启动。
在REPL,你可以键入Common Lisp的命令,并看到他们的评估结果。 按Tab键来完成的东西会弹出尽可能完整的窗口; 这是聪明的建成,使输入类似“DB”将弹出包含“解构绑定”名单。 很有帮助。 M- /将你已经在Emacs类型的地方也很齐全符号; 另一个节省很多时间。 (此作品无处不在Emacs,顺便说一句,被称为“动态缩写扩展”。)
此前你说的REPL很无聊,所以让我们打开一个真正的文件。 按Cx Cf test.lisp
。 不出意外,这将打开一个缓冲区编辑test.lisp,当你第一次保存文件(这将创建Cx Cs
)。 这Lisp的文件是知道泥,让您输入的所有可以轻松地运行Lisp的验证。 tab完成,分级检查,互动测试等一应俱全。
作为一个例子,输入类似(+ 1 2)
然后按Cx Ce
。 你会看到的结果,由运行Lisp语言的评估,在窗口的底部。 这使您可以测试各个表情当您输入到文件中。
下一步是写一个全功能的,也许:
(defun my-1+ (x)
(+ x 1))
您可以加载此功能成多种方式运行Lisp的; 我通常使用CMx
。 现在,可以更改回REPL缓冲液( Cx b *slime-repl sbcl*
或类似的)和类型(my-1+ 42)
并观察结果43
打印。
另一个带来的功能整合到运行Lisp的方法是编译并加载与整个文件Cc Ck
。
无论如何,这是用泥和Emacs的基础知识。 很显然,许多提供更多的功能,但是这应该给你煤泥Lisp程序的味道。 我会提到最后一两件事,Emacs是很大程度上是自文档,所以如果你想了解更多,Emacs可以帮助你。 虽然你的Lisp缓冲区,您可以键入Ch m
获得在编辑Lisp中你可以使用命令的完整列表。 您可以点击链接以获取有关各功能的详细信息。
玩得开心!
不要放弃VI / Vim的,只是因为人都喜欢泥很大比例。
我以前在这里SO写过关于这一点。 检查这些了:
- 使用Vim的Lisp的发展
- https://stackoverflow.com/questions/451329/what-is-the-preferred-way-to-run-lisp-web-application/558329#558329
- 最好的Common Lisp的IDE
- 是否有Lisp程序任何好的编辑,比Emacs的其他?
我会很高兴能在这里回答具体问题。
Lispbox和泥都很好的答案,但如果你想要的东西就更简单了,只是一起玩,你可以考虑免费版LispWorks个人或快板CL免费版 。 我还没有使用,也可以在Linux上自己,但他们似乎都配备了图形用户界面。 将有堆大小或其他限制(因为完整的版本是不是免费的),但他们可能会更容易潜入。
那么,一个良好的开端将是执行口齿不清的信息页的部分。
一般情况下,当你在Emacs解释语言工作,你编辑的源文件,并与下突(Emacs可以催生,在这种情况下,口齿不清进程的新工艺)进行交互。 可以评估一个SEXP(平衡表达),区域,或用简单的按键整个缓冲区。 这些命令代码发送到口齿不清过程和评估。
这种使用模式适用于贝壳,TCL,口齿不清,有翻译什么...
在维基百科上有很多很好的信息 。
有不同的方式建立一个Lisp的环境,从人工方法外的开箱安装。
以下的答案必须是clbuild ,它总是下载你所有软件包的全新版本:
假设你有Emacs和SBCL已经安装了,下面让您能和煤泥运行。 (你还需要bash中,的darcs,CVS等,但FreeBSD的端口包括所有的这些,据我所知)。
$ darcs get --set-scripts-executable http://common-lisp.net/project/clbuild/clbuild
$ ./clbuild/clbuild install slime
$ ./clbuild/clbuild slime
你不必(实际上,不应该)修改您的.emacs这一点。 如果你已经有泥的手动安装之前玩过,清理出从的.emacs旧的变化。 clbuild做煤泥设置你。
如果你喜欢,clbuild也可以获取和建立一个最近的SBCL给你:
$ ./clbuild/clbuild install sbcl
$ ./clbuild/clbuild compile-implementation sbcl
# afterwards you can uninstall the FreeBSD-provided Lisp used for bootstrapping
至于你的使用问题:
- CX 5 2让你玩第二个窗口
- 抄送CK编译和加载当前缓冲区
- 有内置选项卡完成,而且还完成其他功能。 我个人喜欢抄送弥模糊完成。
- jrockway的回答对我在这里就不重复Emacs命令附加很好的提示
我可以说,Emacs是用于编写Lisp的,因为我在大学为此用它的良好环境。 在*scratch*
缓冲区提供了测试代码的好地方。 编译器文档应该说如何调用它们,这样你就可以写出你的文件到硬盘,然后在shell窗口中运行它们,或使用Emacs'模式中的一种集成编辑 - 编译和运行。 (对不起,我没有更具体的,它已经15年了。)