Lisp 为什么Setq工作,但不让它工作?

Lisp 为什么Setq工作,但不让它工作?,lisp,common-lisp,Lisp,Common Lisp,我遵循我的书《lisp之地》中的语法,let版本只在传递*string*时返回nil。而“setq”版本返回字符串的反向版本 LET的语法为: (LET ((var1 val1) (var2 val2) ...) body) 代替(varN-valN)你可以把varN,这是(varN-nil)的缩写。您还可以省略valN,在这种情况下,它默认为nil 因此,您的代码相当于: (defun reverse-string (string) (let ((revers

我遵循我的书《lisp之地》中的语法,let版本只在传递*string*时返回nil。而“setq”版本返回字符串的反向版本


LET
的语法为:

(LET ((var1 val1)
      (var2 val2)
      ...)
  body)
代替
(varN-valN)
你可以把
varN
,这是
(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))

哈哈,谢谢你,我想这只需要让我们有一个double((如果定义了多个变量,谢谢你指出了缺少“reverse”的地方)我的原稿中有,但我已经编辑了很多次,我一定错过了。我感谢您的快速响应。据它所知,您定义了两个变量:
反向
字符串
。它怎么能说您只定义了一个变量?您不可能这是我的错误,不是您的:)谢谢你这么快的帮助!
(defun reverse-string (string)
  (let ((reversed (reverse string)))
    reversed))