195_common lisp中的let以及let*

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值