【问题标题】:Correct usage of destructuring-bind正确使用解构绑定
【发布时间】:2010-11-28 13:10:55
【问题描述】:

我正在尝试解构绑定,如下所示:

(destructuring-bind
           (a  b) '(1  2) (list a b)))

当我在 REPL 中评估这个时,我得到:

READ from #1=#<INPUT STRING-INPUT-STREAM>: an object cannot start with #\)
   [Condition of type SYSTEM::SIMPLE-READER-ERROR]

我希望结果是

(1 2)

在上述代码的上下文中,该错误对我没有任何意义。

我意识到我只是绑定一个简单的参数列表,而不是一棵树,但我仍然希望它能够工作。关于我哪里出错的任何线索?

【问题讨论】:

    标签: lisp common-lisp


    【解决方案1】:

    去掉末尾多余的 ) 。工作正常。

    【讨论】:

    • 呻吟,好尴尬。谢谢!至少我现在知道将来如何解释该错误消息。
    【解决方案2】:

    当我们这样做时,通常的格式是:

    (destructuring-bind (a  b)
        '(1  2)
      (list a b))
    

    它还可以更容易地查看括号是如何匹配的。一般来说,编辑器也会提供帮助。将光标放在右括号后应突出显示相应的左括号。另请注意,所有自尊的具有 Lisp 语法能力的编辑器都有一个命令来查找不匹配的括号。

    【讨论】:

    • 我知道有人会对此发表评论 ;-)
    • 我正在使用 Emacs/Slime,它突出显示了括号,我以为我已经检查过它们都匹配,但我显然没有小心,我的罪过 100 次鞭笞 ;-)再加上我缺乏随性——我什至选择忽略 SO 代码编辑器给我的巨大提示,用红色突出显示我粘贴的代码!
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多