(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块中可见?
谢谢。
答案 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