Lisp语言:Do循环的使用

有关Lisp语言中的Do循环,就像很多人说的一样,初看起来太奇怪了,不知道怎么理解。所以在这里做一个简单的介绍,看完大家可以发现其实Lisp中的do循环也是比较简单的。

 

先看看Lisp语言中对于do循环的说明:

(do (variable-definitions*)
    (end-test-form result-form*)
     statement*)


翻译成“中文”大概意思是这样的:

(do (变量定义)
    (结束条件 返回值)
     循环主体)


其中的“变量定义”又有一些格式,展开大概是这个样子的:

(do ((变量名 变量初值 (变量变化语句)))
      (结束条件 返回值)
       循环主体)

现在我们希望定义一个变量x,x的初值是1,每次循环x=x+1,当x>10时结束循环,在循环主体中通过format函数输出变量x,则它的Lisp代码是这个样子的:

 

(do ((x 1 (1+ x)))
      ((> x 10) nil)
    (format t "in the loop~a ~%" x))
    

 

为了让各位程序员更好地理解以上Lisp代码,在这里列出对应的java代码:

int x=1;
while (x<=10)
{
      System.out.println("in the loop "+x);
      x=x+1;
}


注意这里没有使用java里的do while或者是do until循环,原因是java里的do while 和 do until循环都在执行循环主体后才进行判断,而Lisp中的do循环一开始就进行判断。

所以上面使用了java中的while循环,条件也变成了x<=10.


下面是Lisp中使用do循环的完整代码,定义了一个测试函数叫do-test,为了让输出更加清晰,在do循环前后分别加了一行输出。

(defun do-test ()
  (format t "staring do loop~%")
  
  (do ((x 1 (1+ x)))
      ((> x 10) nil)
    (format t "in the loop~a ~%" x))
    
  (format t "end of do loop~%"))


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值