lisp' iteration 的疑惑

1.(let ((x 'a))
(do ((x 1 (+ x 1))
(y x x))
((> x 5))
(format t "(~A ~A) " x y)))

输出为:(1 A) (2 1) (3 2) (4 3) (5 4)
NIL
2.(let ((x 'a))
(do ((x 1 (+ x 1))
(y x))
((> x 5))
(format t "(~A ~A) " x y)))

输出为:(1 A) (2 A) (3 A) (4 A) (5 A)
NIL

这是为什么呢?
在2中(y x x)少了一个x,那么说明do中的变量没用,也可以说,第一个x代表let定义的值,第二个x代表的是do里的局部变量。
但是还有一个问题是是1中的输出为什么第一次是:(1 A),这里引用树上的一段话:每一次循环,x的值是前一个值加1,y的值是前一个的x的值。因为第一次进循环,x为1,x之前的值为a,此时输出为(1 A),update-form的值为(+ 1 1);第二次进循环时,x的值为2,x之前的值为1,y的值也就是1,此时输出为:(2 1)......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值