237_eq函数的使用

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

https://github.com/GreyZhang/g_lisp

    继续学习emacs,继续学习lisp,继续学习emacs lisp。

    继续上次分析的emacs中的代码,具体如下:

237_eq函数的使用

    这一次,了解学习一下里面另一个之前不熟悉的函数eq。从字面意思看,这个应该是判断是否相等的一个函数。查看内置的帮助如下:

237_eq函数的使用

    信息比较少,从功能描述看就是看看两个参数是否是相同的lisp object。那么,这个object的概念是什么呢?是必须内存区域或者地址相同吗?

    接下来看看文档中的描述:

237_eq函数的使用

    首先,文档再次明确了是相同的对象。但是,有一个例外,那就是相同数值的整数会被认为是同一个对象。如果是其他的类型,除非是绑定在一起,一个变了另外一个跟着变的这种,否则不算是同一个对象。果真,这个eq没有直观感觉上的那么简单。不过,这个有点让我怀疑python抄了lisp的这个功能。Python中的哪个功能与这个有着类似的行为呢?我觉得is就是!先把我熟悉的python的一个小测试放在这里试试:

237_eq函数的使用

    这里的is是与emacs lisp中的eq类似的功能,不过==则有着不同的效果。接下来,测试一下eq的功能。

237_eq函数的使用

237_eq函数的使用

237_eq函数的使用

237_eq函数的使用

    最后这个测试算是前面落下的一个注意点,字符串中有一个特殊的地方:空字符串会被判定为是同一个对象,这样的设计是为了能够节省空间。

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

https://github.com/GreyZhang/g_lisp