如何解决Lisp 词法闭包 - 函数声明
(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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。