lisp iteration

1.Do

  (do ((temp-one 1 (1+ temp-one))

       (temp-two 0 (1- temp-two)))

      ((> (- temp-one temp-two) 5) temp-one)) =>  4

  (do ((temp-one 1 (1+ temp-one))

       (temp-two 0 (1+ temp-one)))     

      ((= 3 temp-two) temp-one)) =>  3

第一次循环将temp-onetemp-two用初始值(1,0)初始化,再计算最后的循环终止条件,如果结果为false,那么运行body里的代码;第二次循环,先计算step-form里的内容,这里注意几点:1.后面的step-form可以引用前面变量的值(如第二个例子temp-two 0 1+ temp-one))

但是step-form的计算是并行的,即在temp-twostep-form里引用temp-one的值只能是上一次循环结束时保存的值(如第二个例子当temp-two3时,实际temp-one2,因为temp-two不等temp-onestep-form执行完再执行自己的step-form,并行)。

2.do*

  (do* ((temp-one 1 (1+ temp-one))

        (temp-two 0 (1+ temp-one)))

       ((= 3 temp-two) temp-one)) =>  2

Do*和do很相似,但是do*计算step-form时是串行的。

3.Dolist

 (setq temp-two '()) =>  NIL

 (dolist (temp-one '(1 2 3 4) temp-two) (push temp-one temp-two)) =>  (4 3 2 1)

 (setq temp-two 0) =>  0

 (dolist (temp-one '(1 2 3 4)) (incf temp-two)) =>  NIL

 temp-two =>  4

 (dolist (x '(a b c d)) (prin1 x) (princ " ")) 

>>  A B C D 

=>  NIL

4.Dotimes

(dotimes (temp-one 10 temp-one)) =>  10

 (setq temp-two 0) =>  0

 (dotimes (temp-one 10 t) (incf temp-two)) =>  T

 temp-two =>  10

Dotimes是针对integer操作的(上面例子的10),var(temp-one)每次都会是010之间的一个数字,body里利用这个变量做些事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值