变量在if块中不可见

asd*_*asd 0 common-lisp

(let ((x 21) (y 7)) 
  (princ (/ x y)) 
  (let z 
    (/ x y) 
    (if (eq z 3)(princ "Working"))))
Run Code Online (Sandbox Code Playgroud)

我对这个程序的意图是当z等于3时打印出"Working",我假设z在if块中可见(来自let z); 但是,情况并非如此,错误读作:

-IF:变量Z没有值.

有没有办法让我在if块中看到变量z?

谢谢.

Bar*_*mar 5

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

(let ((var1 val1)
      (var2 val2)
      ...)
  body)
Run Code Online (Sandbox Code Playgroud)

在绑定列表中,您可以只使用varN而不是(varN valN)缩写(varN nil).

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

(let ((z (/ x y)))
  (if (eq z 3) (princ "Working")))
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你不应该eq用来比较数字 - 使用=.