全部学习汇总: https://github.com/GreyZhang/g_lisp

         总觉得一个list的用法,让我看到了太多lisp的特色。我学习主要还是服务于我的emacs hack,今天的小结针对emacs lisp。

         先做一部分测试,然后逐个进行分析:

420_emas lisp lisp小结_lisp

第1行,创建列表并且赋值给变量;

第4行,创建列表,且不想元素被求值;

第7行,利用变量创建列表;

第10行,这个类似前面刚刚小结过的vector的创建,创建指定大小的list并为每个元素统一赋值;

增加几个测试如下:

420_emas lisp lisp小结_Emacs_02

         之前做了“布尔量”的一个小结,这里算是做一个实质的测试。’(), nil, (list )在emacs lisp是等价的。其实,在一定程度上可以理解为是布尔量中的false。

         再增加几个list创建的测试:

420_emas lisp lisp小结_lisp_03

         Number-sequence,在一定程度上其实是可以对比python的range来理解一下的。但是,两个有着类似的功能但是行为其实还是很不相同的,尤其是单个参数的时候。

         看一部分list元素个数的测试:

420_emas lisp lisp小结_lisp_04

         上面的结果还是很符合我们的预期的,不过,有一个错误的测试。具体的代码是第22行,这个其实是我刚刚回忆了python的range之后,代入了一个错误的习惯思维。之后,感觉有一点迷惑。

         增加一部分访问、提取、切片、拼接等操作测试:

420_emas lisp lisp小结_Emacs_05

         cons看起来的作用两种,列表作为第一个参数或者第二个参数效果略有不同。反倒是作为第一个参数的这种方式之前看过了。作为第二个参数的时候,可以实现一个list的拼接,其实,行为类似push,只是没有改变原来的list。

         append,实现的是两个list的拼接。

         pop是push的反操作。

         再看一部分list与字符串的转换操作:

420_emas lisp lisp小结_Emacs_06

         mapconcat是一种“向量化”的操作,调用后面的函数,逐个传入列表中的参数,转换结束之后拼接。而identity函数的作用是字符转转成实际的字符?

         format的功能应该是要重新认识一下了,在此之前我一直把它当做一个打印函数。substring其实这个还是可以类比python来理解一下,python里面是有一个切片的功能的。