在LispWorks中进行编程02:在LispWorks中进行调试
Category:UI界面编写在LispWorks中进行调试
这是一个快速介绍,解释如何安装LispWorks,然后使用它来试用这个网站上的教程。这些说明适用于Mac; 在PC上的Windows下,一些细节会略有不同。
请注意,本教程中的程序包含故意错误!
正在下载LispWorks
- 从此页面下载免费的LispWorks个人版:
- 运行安装程序,然后按照说明进行操作。
默认选项在Applications文件夹中安装LispWorks Personal 6.0文件夹:
- 双击LispWorks Personal图标以运行LispWorks。
将显示工具栏以及监听器窗口。
设置首选项
如果您在Mac上运行LispWorks,则可能需要设置两个首选项。
- 从LispWorks菜单中选择Preferences ….
- 选择编辑器键与Mac OS X编辑器类似。
- 选择Alt键充当Emacs Meta键。
- 单击“ 确定”按钮。
使用监听器
该监听器是Lisp的交互式命令窗口。您只需在>提示符下键入表达式,然后按Return键即可评估表达式或查找变量的值。
您还可以通过在>提示符下输入函数来定义函数,然后返回:
所以现在你可以输入:
CL-USER 2 > (average 3 7)
并且监听器将响应结果:
5
停止失控的程序- ctrl cmd逗号
在编程时,很容易创建一个错误,导致程序在无限循环中永远运行。
例如,这是尝试编写一个打印“Hello”指定次数的程序:
(defun print-times (n)
(if (< 1 n) nil
(progn
(print “Hello”)
(print-times (- n 1)))))
如果你测试它:
(print-times 1)
你会看到程序陷入循环,无休止地打印“你好”。
解决方案是按住ctrl和cmd键,然后按逗号键。
使用编辑器
LispWorks还包括一个集成的文本编辑器,允许您输入和编辑程序,保存程序以及从磁盘加载程序。如果已打开多个文件,则使用“ 缓冲区”窗格在“ 文本”窗格中选择要编辑的文件。
例如,假设我们正在编写一个过程交换来交换列表的前两个元素。
- 从“ 文件”菜单中选择“ 新建 ” 以显示选择“ 文本”窗格的新“ 编辑器”窗口。
- 在交换过程中输入以下尝试:
(defun swap (list)
(cons (nth list 1)
(cons (first list)
(rest (rest list)))))
- 从“ 文件”菜单中选择“ 保存 ” ,然后输入文件的名称,例如Exercises.lisp。
要定义交换功能,您现在需要编译它。假设您的编辑器窗口不够宽,无法显示完整的工具栏:
- 将光标放在编辑器中交换函数定义的某个位置(或者只是在开始或结束括号旁边),单击编辑器窗口工具栏右侧的>>符号,然后从工具栏图标的菜单中选择编译:
或者,选择Compile Buffer以编译Editor窗口中的所有定义。
编译器消息将显示在“ 输出”窗格中。
- 按空格键返回“ 文本”窗格。
调试过程
要测试交换过程,我们可以在Listener中键入一个表达式,例如:
(swap ‘(1 2 3 4))
因为定义中存在错误,所以Listener会显示错误消息:
调试程序最方便的方法是使用交互式调试器。
- 单击Listener 窗口工具栏 右侧的 >>符号 ,然后 从工具栏图标的菜单中选择 Debug:
将显示“ 调试器”窗口。这显示了错误发生的历史,称为Backtrace,列出了被调用的函数,让您在发生错误时看到内部变量(包括任何参数)。
- 单击NTH旁边的三角形 以显示该函数的参数:
的参数,标签ORIG-N和ORIG-LIST,是我们已经得到了参数的提示第n以错误的方式。
- 双击Debugger窗口中的SWAP行。
在编辑器窗口会到前面来,并自动突出显示的部分交换造成的误差函数:
- 通过修改纠正(nth list 1)错误为(nth 1 list),并编译交换的定义的修正版本。
- 单击>>从弹出菜单中选择Abort,从调试器中退出:
如果你再次尝试评估交换它应该工作这次。
插入断点
有时您尝试修复的错误不会导致错误,但只会导致您的过程产生错误的结果。
例如,这是第一次尝试编写last-elt,一个返回列表中最后一项的过程:
(defun last-elt (list) (let* ((len (length list)) (last (nth len list))) last))
让我们在Listener中测试它:
CL-USER > (last-elt ‘(1 2 3 4))NIL
这显然不是我们想要的。
该 调试器 是有帮助这里。我们可以在程序中插入所谓的断点,这将导致显示调试器,以便我们可以检查变量的内容。
- 通过将程序更改为:插入断点:
(defun last-elt (list)
(let* ((len (length list))
(last (nth len list)))
(break)
last))
- 编译程序。
- 通过在监听器中输入(last-elt’(1 2 3 4))来测试它 。
断点会导致名为Break的错误。
- 选择Debug以显示调试器窗口,如前所述。
我们现在可以在断点处检查变量list,len和last的值。
- 通过选择Continue(继续)从断点继续运行过程退出调试器。
下一步是什么?
LispWorks包含许多其他工具来帮助调试Lisp程序,但本教程已经介绍了基本知识。有关其他功能的详细信息,请参阅LispWorks Personal Edition随附的文档。
http://mip.i3geek.com