为什么Setq工作但不允许?

时间:2015-09-24 17:07:35

标签: lisp common-lisp

我遵循了我的书中所使用的语法" lisp的土地"并且let版本仅在传递* string *时返回nil。而#34; setq" version返回 string 的反转版本。

(defparameter *string* "a b c")
(defun reverse-string (string)
    (let (reversed (string))))

(defun setq-reverse-string (string)
    (setq reversed (reverse string)))

1 个答案:

答案 0 :(得分:2)

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))