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

https://github.com/GreyZhang/g_lisp

    这个在初步分析spacemacs的配置的时候看过了,关于引用。这一次重新趟水common lisp,再做一次小结。

309_common lisp引用小结_lisp

    如果说到引用,首先得看看与之相对的求值。如同上面的数字1以及字符串hi的一个求值,我们看到的其实是最后的意义。而第三个测试,foo的引用在REPL中返回的是一个符号。通过类型查看,我们也能够看得出这个类型,其实如果是输入foo求值的话,REPL会按照symbol来进行求值,寻找他的绑定值。有意思的是这个表达式,本质上是一个cons结构,这是否意味着cons结构在一定程度上可以变成代码片段?

    如果是嵌套引用,那么也能够层层脱壳。在两次获取第一个元素的时候,我们也能够看得出来引用以及后面的信息其实构成一个list。

    接下来的测试,首先做了一个加法的运算。解析器首先会寻找+这个函数,然后把参数传递给他。如果是引用,那么REPL返回的仅仅是这个名称的对象或者数据,没有求值的过程。

    再回到我们刚刚总结过的获取函数名,#’的等效方式是函数function。在一定程度上,为function提供了一个简写的方式。如果对函数进行引用,那么得到的是什么呢?其实也是一个symbol,也就是说如果单纯输入一个print的话,REPL首先应该会按照变量的方式进行解析。

309_common lisp引用小结_lisp_02

    上面的测试可以看得出,REPL确实是按照变量来做了相应的解析,只是失败了。其实,这也同样可以让我们知道函数名是可以跟变量名在字符串形式上重合的。但是,REPL能够自动分辨其各自的属性。接下来,做一个测试:

309_common lisp引用小结_lisp_03

    从上面的结果很容易看得出,这个脱离文档的分析也是说得通的。

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

https://github.com/GreyZhang/g_lisp