235_emacs lisp cons函数的使用

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

https://github.com/GreyZhang/g_lisp

    继续学习emacs,学习lisp,学习emacs lisp。继续上一次的代码分析,有代码如下:

235_emacs lisp cons函数的使用

    首先看看33行,这是一个变量定义。没有增加相应的文档说明信息,但是有一段注释描述。从这里看,这个变量定义的时候是一个未绑定的状态。使用的时候回由上层的“宏展开全部”来进行绑定,修改后去包含defmacro定义的任意宏。

    上面的这段注释,我其实不是很懂。后面在继续分析的过程中可能会有更深的体会。看一下内置的帮助:

235_emacs lisp cons函数的使用

    从上面的信息也是可以看得出来的,这个确实是没有涉及内置的文档信息。不过,单纯看到这里,似乎还是没有学习到什么有用的信息。我们继续往下看的话,是一个函数定义。在这个函数实现上,又出现了我不熟悉的elisp元素,这就需要学习掌握了。接下来,学习cons。

    查看内置的帮助信息如下:

235_emacs lisp cons函数的使用

    这个内置的注释,说的我感觉有点不知所云。缩写含义我弄不清楚,勉强知道CAR和CDR,我关注的cons却依然是一个没解释的信息。查找文档信息如下:

235_emacs lisp cons函数的使用

    简单看了一下,感觉这段文档的描述真的是很到位,让我学到了很多。不过,关于cons,还是没有足够的解释。查看了网络资料,发现我手头的elisp的文档不够新了,下载了最新的找到相应的描述如下:

235_emacs lisp cons函数的使用

    简单来说,就是可以可以容纳两个数据对象的数据对象。而容纳的两个数据对象可以是任意对象。同时,这里也有一个关于CAR和CDR的说明。算是重温一下了。

    这样,简单总结一下cons函数的功能:传入两个数据对象,将其组成一个cons的数据。这是列表组建的一个基础的功能,但是很有意思的是在emacs的实现中list的功能要比这个功能用的多很多。

    同时,这段文档算是解答了我一个疑惑。变量以及函数重名不会有问题,相互之间不会有影响,依然可以实现各自的功能。

    最后,根据文档信息做几个测试。几个测试已经在文档中给出了结果,我这里不做结果的记录演示了。

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

https://github.com/GreyZhang/g_lisp