314_common lisp cond结构
完整的emacs and lisp的学习集合整理如下:
https://github.com/GreyZhang/g_lisp
继续emacs以及lisp的学习,接下来看看common lisp中的cond结构。在此之前,先看一段代码:
为了编辑更加顺手,我在代码编辑的时候没有使用lispbox的emacs而是使用了我日常用的emacs。之后再在lispbox中编译运行,测试得到如下结果:
看上去是完成了一些列的判断。但是,这种判断逻辑实现似乎是有一点丑陋的。如何改进呢?如果在C语言中,类似的方式我们一般会采用switch case的结构来实现。那么,在lisp中是否也有类似的结构呢?其实也是有的,那就是cond。接下来,代码重写如下:
测试效果:
从测试结果看,实现了之前的功能。但是,这个代码实现上更加简洁。其实,我觉得一定程度上这是一个改进版的C语言switch分支,省略了容易让人栽跟头的break。不过,这也不是完全等同的switch,从下面的例子就能够看得出。
测试结果如下:
因此,这里其实还是逃不开一个if的结构,不断去查询下面的信息。如果分支中存在多个同时命中的条件,后面的将无法得到执行的机会。而且,这是一个宏而不是一个函数,通过slime的展开功能能够看得到其对等的代码结构如下:
完整的emacs and lisp的学习集合整理如下: