2.泡沫,洗涤,重复:REPL的一个巡回

使用LispBox作为开发环境,使用Emacs提供文本编辑和SLIM

选择一个Lisp实现

Lisp不像PerlPythonVBC#Java,有固定的实现,Common Lisp只由一个标准定义。而且不像PerlPython由一个机构控制单个实现,也不像VBC#Java由一个公司控制典型实现。Common LispANSI管理标准,任何人想通过阅读标准制造编译器都是可以的而且是免费的。事实上Common Lisp的标准让你在各个编译器实现中,不论是开源还是商业, 都可以使用语言的特性。你能统计出符合标准的程序在不同实现上的性能差异。

为了库的通用性,Common Lisp提供一种灵活的方式写代码“有条件的”使用实现的特殊特性。

Allegro Common Lisp商业的实现最具典型,支持LinuxWindowsOSX。开源实现里面SBCL具有很高水平,编译为本机代码,支持多种Unixes,包括LinuxOSXSBCL是继承自CMUCL。另外OpenMCL也是很不错的选择,编译为机器码,在OSX上有很好的集合环境CarbonCocoa

准备并运行Lisp in a Box

Emacs中描述快捷键时,Ctrl键常使用C表示,比如:C-h,表示按下Crtl的同时按h键。也有M表示Meta(一般都是Alt)Emacs中自带的教程是C-h t,有空格则是在松开Ctrl键按下t键。手册是C-h i,键入C-h ?会有完整的列表。两个最有用的快捷键是C-h k让我们输入任何组合键后告诉我们哪些命令被调用,并且使用C-h w让我们输入一个命令后告诉我们被什么组合键调用。

Emacs中至关重要的是buffer(缓冲),在使用Emacs时所有被编辑的文件都用不同的缓冲表示。在任何时间只有一个当前的,当前的缓冲接受所有输入。在普通操作时会有切换缓冲,表示使用不同的缓冲当作当前缓冲,命令switch-to-buffer,绑定组合键C-x b,有缓冲名在Emacs的底部提示。当输入缓冲名后按Tab键会出现提示列表,列出包含有输入字符的缓冲。提示会建议一个默认缓冲,同意就按Return。也可以在菜单中使用Buffers来选择缓冲。

在某个特定的环境中,组合键能切换到特定缓冲,比如:当编辑Lisp源文件时,组合键C-c C-z切换缓冲到与Lisp交互。

释放你的想法:交互程序

Lisp in a Box首先看到的是:

 

       CL-USER>

 

这是Lisp的提示符,类似Unix或者DOSshell提示。但与shell不同的是shell读取并解释一行命令,而Lisp是读取Lisp表达式,按照Lisp的规则求值并且输出结果。这样无止境的读取,求值,输出就是为什么被称为read-eavl-print loop,简称REPL。这也被当做top-level listener或者Lisp listener

REPL中能定义程序元素,变量,函数,类和方法;对任何Lisp表达式求值;加载文件包含Lisp源文件或者编译代码;编译整个文件或者个别函数;进入调试器;步进代码;和检查个别Lisp对象的状态。

完全可以不借助任何其他编程环境仅仅依靠REPL和任何一个能正确排版Lisp代码的文本编辑,进行一个漂亮合理的编程。但是对真正的Lisp编程体验,需要一环境,比如SLIME,能通过REPL和整个编辑的源文件与Lisp交互。事实上,你不希望从源文件剪切和粘贴函数定义到REPL,或者加载整个文件只是因为你改变了一个函数;你的Lisp环境允许我们对个别表达式和文本编辑器中的整个文件求值或者编译。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐