209_emacs lisp向列表中增加元素

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

    https://github.com/GreyZhang/g_lisp

    继续学习spacemacs的配置,从中学点emacs lisp的基础知识。前面做了初始化的分析:

    之前分析了上面的代码运行,启动emacs之后,if条件并不成立,因此会执行load-file的操作。之后,将会加载制定的文件。文件加载前面也做了分析,之后被加载的文件是下面的这个文件:

    接下来,这个文件的信息会被加载到运行环境中。为了弄明白这个配置究竟在做什么,接下来看看这个文件的内容。

    首先,这个文件中定义了一个函数。为了弄明白这个函数的功能,需要先熟悉一下add-to-list函数。这个也就是本次的学习点了。查看函数的帮助信息如下:

    这个功能,可以类比之前学过的python里面的列表处理功能。向列表中增加元素,不过不同的是这里的列表有点哈希或者字典的意思。但是,这个列表又不同于哈希,因为这个列表是有顺序的。默认情况下,加入到表头,指定参数后可以实现追加。这么看来,这个函数很有C语言数据结构中的链表的操作方式的意思,只是这个功能又增加了一个检查是否存在的功能。

    检查是否存在的功能,可以使用默认的功能,也可以使用自己指定的函数。看起来,这个函数在实现上的技巧性确实是很高了。要完成这么一系列的功能,又能够容纳不同的数据类型,这是一个很庞大的基础设计实现,至少C不会很容易。或许,这算是lisp的高级点?

    接下来,测试学习这个函数。相应的测试按照elisp的文档来做一遍:

    创建了变量列表。

    成功增加了元素c。

    由于b已经存在,增加无效。

    我自己再增加一个追加功能的测试:

    从上面的效果看,d被成功追加到了列表中。

其他的lisp相关的学习笔记汇总,可以参考如下链接:

    https://github.com/GreyZhang/g_lisp