(let ((x 21) (y 7))
(princ (/ x y))
(let z
(/ x y)
(if (eq z 3)(princ "Working"))))
我對這個程序的打算是當z等於3時打印出「Working」,其中我假設z在if中可見(來自let z)in if塊;然而,情況並非如此,錯誤讀爲:變量在if塊中不可見
-IF:變量Z沒有值。
有沒有辦法讓變量z在if塊中可見?
謝謝。
(let ((x 21) (y 7))
(princ (/ x y))
(let z
(/ x y)
(if (eq z 3)(princ "Working"))))
我對這個程序的打算是當z等於3時打印出「Working」,其中我假設z在if中可見(來自let z)in if塊;然而,情況並非如此,錯誤讀爲:變量在if塊中不可見
-IF:變量Z沒有值。
有沒有辦法讓變量z在if塊中可見?
謝謝。
您錯過了一組括號爲z
的聲明。
(let ((x 21)
(y 7))
(princ (/ x y))
(let ((z (/ x y)))
(if (eq z 3)
(princ "Working")))) ;; Working
您的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
比較數字 - 使用=
。
當某些東西不起作用時,逐個檢查每個組件,以找出問題的確切位置。就像這裏一樣,你可以檢查內部的'let'以得到'x = 21'和'y = 7'。 – Mooncrater