为什么 Setq 工作但不让?
Why does Setq work but not let?
我遵循我书中的语法 "The land of lisp" 并且 let 版本只有 returns 在传递 *string* 时为 nil。而 "setq" 版本 returns 是 string.
的反转版本
(defparameter *string* "a b c")
(defun reverse-string (string)
(let (reversed (string))))
(defun setq-reverse-string (string)
(setq reversed (reverse string)))
LET
的语法是:
(LET ((var1 val1)
(var2 val2)
...)
body)
代替 (varN valN)
你可以只用 varN
,这是 shorthand 代表 (varN nil)
。您也可以省略 valN
,在这种情况下它默认为 nil
.
所以你的代码等同于:
(defun reverse-string (string)
(let ((reversed nil)
(string nil))))
您缺少一定程度的括号来执行您想要的操作:
(defun reverse-string (string)
(let ((reversed (string)))))
您还缺少对 reverse
的调用并返回变量
(defun reverse-string (string)
(let ((reversed (reverse string)))
reversed))
我遵循我书中的语法 "The land of lisp" 并且 let 版本只有 returns 在传递 *string* 时为 nil。而 "setq" 版本 returns 是 string.
的反转版本(defparameter *string* "a b c")
(defun reverse-string (string)
(let (reversed (string))))
(defun setq-reverse-string (string)
(setq reversed (reverse string)))
LET
的语法是:
(LET ((var1 val1)
(var2 val2)
...)
body)
代替 (varN valN)
你可以只用 varN
,这是 shorthand 代表 (varN nil)
。您也可以省略 valN
,在这种情况下它默认为 nil
.
所以你的代码等同于:
(defun reverse-string (string)
(let ((reversed nil)
(string nil))))
您缺少一定程度的括号来执行您想要的操作:
(defun reverse-string (string)
(let ((reversed (string)))))
您还缺少对 reverse
的调用并返回变量
(defun reverse-string (string)
(let ((reversed (reverse string)))
reversed))