195_common lisp中的let以及let*

         这是两种略有不同的变量引入方式,主要的差异点在于变量的作用域。

         首先看一下let最简单用法:

         上面,引入3个变量的同时,给两个变量进行了“初始化”。同时,也能够看得到另一个问题,也就是没有初始化的变量默认的初始值是多少?这个初始化的问题,是我最初学习的时候就考虑到的,在教程中得到了答案,在这里做一次测试。

         如果做一个修改,具体如下:

         这样,其实是一个错误的设计。因为y在定义的时候x还没有生效,软件解析分析还没有到达let的形式体重。什么是形式体呢?就是let引入的变量列表后面的部分,不包括变量列表。因此,上面的代码运行会报错。

         上面是报错信息,提示变量x还处于未绑定的状态。

         相比之下,可以认为let*会让作用域扩大,包含变量列表部分。因此,设计如下的代码是可以的:

         从上面结果看,不仅运行成功了而且y的初始化时在x初始化且绑定了初始值初始值之后。暂时没有考虑到为什么非得区分两种方式,但是有一点事可以预见的,这种设计会让有些代码的设计简化。

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

猜你喜欢

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