Lisp词汇闭包-函数声明
我有一个函数,格式化ls:Lisp词汇闭包-函数声明,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,我有一个函数,格式化ls: (defun format-ls (ls) (let (( acc ())) (dolist (elt ls) (push "(~A . " acc)) acc)) 您可以注意到,在结束行(acc))中缺少一个括号 然而,我的Lisp REPL(sbcl 2.1.1)对该表达式的解释没有任何错误: 但如果我添加缺少的括号,如下所示: (defun format-ls (ls) (let ((
(defun format-ls (ls)
(let (( acc ()))
(dolist (elt ls)
(push "(~A . " acc))
acc))
您可以注意到,在结束行(acc))中缺少一个括号
然而,我的Lisp REPL(sbcl 2.1.1)对该表达式的解释没有任何错误:
但如果我添加缺少的括号,如下所示:
(defun format-ls (ls)
(let (( acc ()))
(dolist (elt ls)
(push "(~A . " acc)))
acc))
REPL抛出以下错误:
现在,所有括号都匹配的表达式将被解释为没有任何问题:
(b)
(defun post+ (ls)
(let (( acc ()))
(let ((i -1))
(dolist (elt ls)
(push (+ elt (setf i(+ i 1))) acc)))
(reverse acc)))
我错过了什么
(defun format-ls (ls)
(let ((acc ()))
(dolist (elt ls)
(push "(~A . " acc))
acc))
s表达式中没有不匹配的括号。不过,字符串中只有一个开括号
上面写得很好:
CL-USER 40 > (read-from-string "(defun format-ls (ls)
(let ((acc ()))
(dolist (elt ls)
(push \"(~A . \" acc))
acc))")
(DEFUN FORMAT-LS (LS)
(LET ((ACC NIL))
(DOLIST (ELT LS) (PUSH "(~A . " ACC)) ACC))
221
您缺少的是,第一个示例中没有不匹配的paren,第二个示例中有(额外的结束paren)。你是不是把绳子里的帕伦当作要匹配的帕伦中的一个?@Rainer Joswig-谢谢你花时间来经历我暂时(我希望…)的精神错乱。我早该知道是喝咖啡休息的时候了。你的压痕有问题
acc
在let
的范围内,因此对它的引用必须比(let…
)缩进更多。这可能是因为您的编辑器被字符串文字中的括号弄糊涂了。