变量在if块中不可见

时间:2017-07-12 18:48:28

标签: common-lisp

(let ((x 21) (y 7)) 
  (princ (/ x y)) 
  (let z 
    (/ x y) 
    (if (eq z 3)(princ "Working"))))

我对这个计划的意图是"工作"当z等于3时打印出来,我假设在if块中可以看到z(来自let z);然而,事实并非如此,错误读作:

  

-IF:变量Z没有值。

有没有办法让变量z在if块中可见?

谢谢。

2 个答案:

答案 0 :(得分:5)

您的LET语法不正确。 LET的第一个参数应该是变量绑定列表:

(let ((var1 val1)
      (var2 val2)
      ...)
  body)

在绑定列表中,您只能使用varN而不是(varN valN),这是(varN nil)的缩写。

但是你根本没有列表,你只需要符号列表Z。这是无效的(我很惊讶你没有因为它而没有得到语法错误)。我怀疑你的意思是:

(let ((z (/ x y)))
  (if (eq z 3) (princ "Working")))
顺便说一句,你不应该使用eq来比较数字 - 使用=

答案 1 :(得分:0)

您在z声明周围错过了一组括号。

(let ((x 21) 
      (y 7)) 
  (princ (/ x y)) 
  (let ((z (/ x y)))
    (if (eq z 3)
      (princ "Working")))) ;; Working