为什么这个 Lisp do 循环的输出与预期不同?

问题描述 投票:0回答:1

为什么这个 Lisp do 循环的输出与预期不同?

身体:

我有以下 Common Lisp 代码:

(setq x 10)
(setq y 30)

(do ((x 0 (+ 3 x)) 
     (y 20 (- y 2))
     (z (- y x) (- z x)))
    ((> x y) (- x y)) ; Exit condition
  (format t "~% z = ~d" z))
(format t "x = ~d y = ~d" x y)

我希望输出是:

z = 20
z = 17
z = 11
z = 2
z = -10
x = 15 y = 10

但是,当我运行这段代码时,编译器告诉我这不是正确的解决方案。我对以下内容感到困惑:

变量 x、y 和 z 在每次迭代期间如何更新? 为什么我的预期输出不正确? 正确的输出是什么以及为什么? 有人可以帮助我理解这段代码的执行流程和实际输出吗?

common-lisp
1个回答
0
投票

查看 Common Lisp 超规范中 do* 和 do 之间的区别。

© www.soinside.com 2019 - 2024. All rights reserved.