314_common lisp cond结构

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp

    继续emacs以及lisp的学习,接下来看看common lisp中的cond结构。在此之前,先看一段代码:

314_common lisp cond结构

    为了编辑更加顺手,我在代码编辑的时候没有使用lispbox的emacs而是使用了我日常用的emacs。之后再在lispbox中编译运行,测试得到如下结果:

314_common lisp cond结构

    看上去是完成了一些列的判断。但是,这种判断逻辑实现似乎是有一点丑陋的。如何改进呢?如果在C语言中,类似的方式我们一般会采用switch case的结构来实现。那么,在lisp中是否也有类似的结构呢?其实也是有的,那就是cond。接下来,代码重写如下:

314_common lisp cond结构

    测试效果:

314_common lisp cond结构

    从测试结果看,实现了之前的功能。但是,这个代码实现上更加简洁。其实,我觉得一定程度上这是一个改进版的C语言switch分支,省略了容易让人栽跟头的break。不过,这也不是完全等同的switch,从下面的例子就能够看得出。

314_common lisp cond结构

    测试结果如下:

314_common lisp cond结构

    因此,这里其实还是逃不开一个if的结构,不断去查询下面的信息。如果分支中存在多个同时命中的条件,后面的将无法得到执行的机会。而且,这是一个宏而不是一个函数,通过slime的展开功能能够看得到其对等的代码结构如下:

314_common lisp cond结构

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp