196_common lisp动态变量定义

         记不清从哪里看到的信息说lisp简单,让我有想法开始学习lisp。我随便找了一个看着评价不错的教程《实用common lisp编程》,感觉这个一点都不简单,上手挺难的。教程中,存在大量没有解释过就使用的东西。这让我的学习有点零碎,不够系统。我把我自己学习的所有的记录整理了一下,算是组合成了一个集合。整理的信息链接如下;

         https://github.com/GreyZhang/g_lisp

         今天,小结一下common lisp的变量定义。能力有限,暂时把我能够看懂的部分整理出来。或许,就这一个简单的概念就得花费掉很多时间来做整理总结。

类比C语言,这个可以认为是全局量。需要知道两个宏,分别是defvar和defparameter。接下来,看看两个定义变量的方法以及差异。

首先看defparameter,这样可以方便对比出defvar的差异。

         标准格式中,可以最后面加一个字符串作为文档性信息,这个文档性的信息是可以省略的。Var5的定义可以看出defparameter与defvar的差异,后面的例子中可以看出这个defparameter不支持的操作defvar是可以支持的。

         从上面的例子可以看出,虽然defparameter不支持的未绑定状态defvar支持。但是,在绑定数据之前不能够进行引用访问。但是,可以对这个量进行赋值绑定后进行访问。到此为止,动态变量其实还没有结束,还有一个let操作与之有一些小纠缠类的应用方式。其实,我觉得看教材的时候看得有点蒙圈,如果学习过C语言只需要提一个简单的概念类比就能够从某些角度更加理解这个用法。这个概念就是文件级别的静态变量。接下来,看看这个小纠缠的应用方式:

         从上面的记录可以看出,let的作用相当于多了一个静态量覆盖掉了原来的全局信息。这种用法,我多少有点不理解设计意图。不过,好在还是有类比的一个模型可以参考。

         代码都比较简单,可以直接敲一遍,不做文本类的记录了。

        

发布了812 篇原创文章 · 获赞 163 · 访问量 172万+

猜你喜欢

转载自blog.csdn.net/grey_csdn/article/details/103981189