在LispWorks中进行编程02:在LispWorks中进行调试

  • 0

在LispWorks中进行编程02:在LispWorks中进行调试

Category:UI界面编写 Tags : 

在LispWorks中进行调试

这是一个快速介绍,解释如何安装LispWorks,然后使用它来试用这个网站上的教程。这些说明适用于Mac; 在PC上的Windows下,一些细节会略有不同。

请注意,本教程中的程序包含故意错误!

正在下载LispWorks

  • 从此页面下载免费的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-NORIG-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以显示调试器窗口,如前所述。

我们现在可以在断点处检查变量listlenlast的值。

  • 通过选择Continue(继续)从断点继续运行过程退出调试器。

下一步是什么?

LispWorks包含许多其他工具来帮助调试Lisp程序,但本教程已经介绍了基本知识。有关其他功能的详细信息,请参阅LispWorks Personal Edition随附的文档。


Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。