【问题标题】:(Scheme) Unbound Variable when copy-pasting code(方案)复制粘贴代码时的未绑定变量
【发布时间】:2020-01-31 02:12:52
【问题描述】:

我正在将以下 Scheme 代码从 pdf 复制到 emacs 上的缓冲区文件中:

(define (plural wd)
  (if (equal? (last wd) ’y)
    (word (bl wd) ’ies)
    (word wd ’s)))

初始格式为长字符串,我手动将其编辑为上述格式。文件加载,但是当我使用该功能时出现错误:

*** Error:
unbound variable: |’y|
Current eval stack:
__________________
0    (equal? (last wd) |’y|)
1    (if (equal? (last wd) |’y|) (word (bl wd) |’ies|) (word wd |’s|))

但是,当我手动键入此代码并加载文件时,该函数运行没有问题。

代码的粘贴/编辑以何种方式与代码的格式混淆?

是否有正确的方法将代码复制粘贴到文件中?在粘贴到缓冲区之前,我尝试在文本编辑器中格式化代码,但这也不起作用。

感谢您的时间和帮助。

【问题讨论】:

  • 您需要将大括号替换为ASCII单引号。
  • 创建 PDF 的人让它做“智能引用”。
  • 太棒了!我不知道或注意到有不同的报价。谢谢。

标签: macos emacs scheme stk


【解决方案1】:

Barmar 已经在 cmets 中回答了这个问题,但这应该可以帮助您完成您的问题,并帮助其他人在未来遇到同样的问题。

当您从 PDF 复制/粘贴代码时,您没有复制简单的 ASCII 引号字符 '。相反,您复制了“右单引号”(unicode U+2019)’。由于这不是 Scheme 中的保留字符,它可以用作标识符,因此您期望的引用符号 'y 实际上是标识符 ’y。该错误是由于变量’y 没有绑定造成的。

一种不需要手动复制代码或手动修复每个引号的简单方法是查找并替换’ 为'(只要您不期望任何@987654330 @ 字符串中的字符)。

【讨论】:

  • 感谢您分享此内容。我对那个错误感到困惑,你说清楚它是怎么发生的。
  • @user9969550 请注意,这现在是复制和粘贴代码时的常见问题,因为如今许多发布系统都将撇号“智能”自动转换为大引号字符,这会在应用于代码。因为它很难被发现,所以文档的作者通常不知道他们粘贴的代码已经以这种方式被破坏了。
  • @user9969550 令人难以置信的是,现在这甚至是 Emacs 中的一个问题。您可能想要自定义用户选项 text-quoting-style 并将其设置为 'grave 以确保 Emacs 不会与引号混淆。否则,如果作者在没有使用特殊转义语法(以前从未需要过)的情况下将引号字符放入文档字符串中,它将被转换为不同的引号字符,这当然意味着文档字符串中的示例 elisp 可能会导致错误。
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多