使用 Cusp Eclipse 插件开发 Lisp 应用程序
![]()
![]()
![]()
平均分 (共 3 个评分 )
单击已添加的新远程站点旁边的复选框并单击 Finish(参见图 2)。
图 2. 选择 Cusp Eclipse Update Site
系统将显示另一个窗口,在该窗口中需要展开 Cusp Eclipse Update Site 并选择 Cusp,如下所示:
图 3. 选择要安装的功能
单击 Next。然后阅读许可证协议并单击 I accept the terms in the license agreement 接受许可证协议,然后单击 Next。确保选中所有库,如下所示,然后再次单击 Next。
图 4. 选择可选功能
最后一个页面将显示要安装功能的安装汇总。单击 Finish。插件及其组件将下载并安装。下载后,您将收到一则警告,表明将要安装一个未签名的功能。单击 Install all。在安装结束时,系统将询问您是否要重新启动 Eclipse;请单击 Yes。
您已经安装了 Eclipse Cusp 插件。接下来,将创建一个 Lisp 项目。
单击 Finish 后,将创建新项目并打开 Lisp 透视图,如下所示:
图 6. Lisp 透视图
查看 Lisp 透视图。Lisp Navigator 窗口显示打开的项目及其相关文件。Outline 窗口显示当前打开文件的概要。位于右上侧显示 main.lisp 的窗口是 Lisp 开发窗口。位于右下侧的窗口 REPL 是 Lisp 的命令行 Lisp 解析程序,您可以在这里运行 Lisp 命令。
如果关闭并重新打开 Eclipse,则需要装入项目的 .asd 文件,如下所示:
图 7. 装入 ASD 文件
注意,需要在 my_new_lisp_project 文件夹下的 my_new_lisp_project.asd 文件上右键单击,然后选择 Load asd。这实际上就是在 REPL 窗口中编译 Lisp 项目,允许您输入可以使用新代码的 Lisp 命令。
接下来,将尝试使用 Cusp 进行一些 Lisp 开发。
来测试这个 first_echo_function。注意,'("howd" "y h" "o") 部分是用于定义列表的语法。首先,单引号必须放在括号之前,然后在括号内定义列表元素。输出如下所示:
?
您将创建一种分别处理每个列表元素的方法,这是 Lisp 的真正强大之处。定义如下:
。输出如下:
清单 7. 连接两个字符串的输出
?
完成。字符串 "howd" 和 "y ho" 变成 "howdy ho"。现在您将使用两个著名的 Lisp car 和 cdr 函数创建更通用化的 concatenation 函数。
清单 1. 连接列表中的三个元素
?
就是这样。已正确连接了三个字符串来生成 "howdy ho"。接下来,创建递归函数。
作为参数时,下面是递归输出:
第一次执行到第 2 行时,if 语句为 false,并用 "ho" 和 (concat_recursive '("wd" "y" " h" "o")) 调用 concat2。第二次执行到第 2 行时,if 语句又为 false,并用 "wd" 和 (concat_recursive '("y" " h" "o")) 调用 concat2。第三次执行到第 2 行时,if 语句又为 false,并用 "y" 和 (concat_recursive '(" h" "o")) 调用 concat2。第四次执行到第 2 行时,if 语句又为 false,并用 " h" 和 (concat_recursive '("o")) 调用 concat2。第五次递归结束。这是因为这一次,第 2 行中的 if 语句现在为 true,并且简单地返回了 "o"。递归解开为:"h" 和 "o"。第三次:连接并返回 "y" 和 "ho"。第二次:连接并返回 "wd" 和 "y ho"。第一次:连接并返回 "ho" 和 "wdy ho" 作为最终结果。这时就完成了递归 —— "howdy ho" 最终被返回,如下所示:
?
已经将递归添加到了 Cusp 开发工具库中。接下来请尝试调试器。
。注意没有用双引号引起的数字 55 不是字符串并将导致显示调试器,如下所示:
图 8. 触发调试器
注意,触发调试器的主要错误是无法对列表 (55 "ho") 调用 concat2。另请注意,在触发该错误之前已经连接了 "h" 和 "o"。
在调试器窗口中,您还可以看到 ==Backtrace==,如图 8 所示。调试器下部的每行(本例中为 0 至 19 行)给出了从单击 Send 到发生错误的详细跟踪。在这里,您还可以查看并跟踪在触发了错误的数字 55 之前的递归。
现在做什么?遇到上面的情况,您有三种选择退出调试器并修改和验证函数输入:可以中止命令并返回到正常的 REPL 窗口;可以关闭连接(通过测试发现,如果选择此选项,则需要重新引导 Eclipse 来重新启动 Lisp 处理器);可以简单地中止调试器并返回到正常的 REPL 窗口。退出调试器的最佳选项始终是中止命令并返回到正常的 REPL 窗口。
就是这样。您已经在 Lisp 中实现了递归函数。
回页首
结束语
您已经成功地使用 Cusp Eclipse 插件完成了 Lisp 开发。现在应当知道 Lisp 为什么如此强大。通过简单的递归语句,可以轻松地推动处理符号和数据列表。Cusp 为 Lisp 的功能补充了内置 Cusp 调试器、拥有项目管理功能的可靠 GUI、交互式 Lisp 编辑器以及可以输入命令和测试代码的 Lisp 处理器命令行接口。要获得更多信息,请一定要查看 参考资料。