问题描述
(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