Common Lisp 中的未绑定变量

2024-03-20

我是 Lisp 新手,正在阅读 ANSI Common Lisp 第 8 章中的文本生成器示例。我按照该示例并在 LET 变量“prec”的范围内定义了一个函数“see”,

(let ((prec '|.|))
  (defun see (symb)
    (let ((pair (assoc symb (gethash prev *words*))))
      (if (null pair)
        (push (cons symb 1) (gethash prev *words*))
      (incf (cdr pair))))
    (setf prev symb)))

并将其保存到一个 lisp 文件中。

然后,当我返回 REPL 并尝试在加载文件的编译版本后调用 see 时,发生了错误:

The variable PREV is unbound. [Condition of type UNBOUND-VARIABLE]

如何正确调用 see ?词法闭包有什么用?我很困惑。

谢谢你的帮助。


看起来您已经输入了prec代替prev在封闭的let form.

词法闭包是“封闭”词法环境一部分的函数(因此得名)。关于 lisp 中的闭包有很多很好的介绍,我不会在这里重复,但本质上,let是操纵词汇环境的最常见方法;在这种情况下,您想要添加绑定prev,然后可用于在表单正文中进行编码。你的职能see将“关闭”此绑定,因此每次调用see可以访问它,即使当您进行这些调用时,您将不再处于由let形式。从某种意义上说,您可以说函数定义与其进行了绑定。

由于您似乎输入了错误的名称prev,您的函数正在尝试引用代码中此时尚未建立的绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Common Lisp 中的未绑定变量 的相关文章

  • ##+#. 是什么意思?是什么意思?

    谷歌几乎是不可能的 因此我的理解仅限于阅读 slime 源代码的上下文线索 也许它是 common lisp 中对象系统的一部分 类似 自己 的东西 片段 cond swank backend sbcl with new stepper p
  • 如何在 Common Lisp 中编写宏定义宏

    我的代码库中有大约两个宏 和攀爬 如下所示 defmacro def stat method method name stat progn defmethod method name monster monster getf stats m
  • Common Lisp:为什么我的尾递归函数会导致堆栈溢出?

    我在理解 Common Lisp 函数的性能方面遇到了问题 我还是个新手 我有这个函数的两个版本 它只是计算给定的所有整数的总和n 非尾递归版本 defun addup3 n if n 0 0 n addup n 1 尾递归版本 defun
  • Common Lisp 格式中可重复的差一问题

    I have format s tabs VT根据是否换行而表现不同 位于行首或行尾 我想知道为什么 不同之处在于 当换行符位于行尾时 行中似乎有一个额外的空格仅一审制表位的 下面举例说明 示例中唯一的区别在于格式控制字符串 它是 A VT
  • Common Lisp 整数到十六进制的转换

    是否有一个与 parse integer ff radix 16 类似的函数可以让我以另一种方式返回 如果我有 int 255 如何将其转换为字符串 ff write to string 255 base 16
  • (撰写)Common Lisp

    我们在 P Graham 的 ANSI Common Lisp 第 110 页 中找到了这个函数构建器来实现组合 参数是 n gt 0 带引号的函数名称 我不完全理解它 所以我将在这里引用代码并在下面指出我的问题 defun compose
  • Common Lisp 中有停止解释器的命令吗?

    我正在寻找一个表达式 它会导致解释器在求值时退出 我发现了很多特定于实现的内容 但在 HyperSpec 中没有找到 我想知道是否有一些我在规范中没有看到的定义 我发现 quit 被 CLISP 和 SLIME 认可 并且 exit 仅被
  • 对 SBCL 中的“ql:quickload”和可执行脚本感到困惑

    我一直在尝试在我的可执行脚本中使用 Quicklisp 包 一个 简单的 工作示例是 usr bin sbcl script eval when compile toplevel load toplevel execute ql quick
  • Common Lisp 重新启动到条件绑定

    我在空闲时间学习 Common Lisp 并对条件系统有疑问 当我们在 common lisp 中处理错误时 我们在处理程序中指定错误类型来确定要处理哪个错误 在引发和处理错误之间 我可以进行一些重新启动 例如使用 restart case
  • 如何在类Unix操作系统下方便的运行SBCL代码?

    David James 写了问题和答案 我将对其进行编辑以符合 Stackoverflow 标准 使用 SBCL 您可以将 Lisp 代码编译为机器代码 像 Java net C 甚至 C 一样 您将需要运行时 所以有两种方法来编译 Com
  • Lisp 当前内存使用情况

    我需要从 Common Lisp 程序中找出当前使用了多少内存 我知道没有可移植的方法 标准函数room以文本形式将信息打印到标准输出 而不是将其作为值返回 但是sb kernel dynamic usage在 SBCL 工作 其他 Com
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • let* 和 set 之间的区别?在 Common Lisp 中

    我正在从事一个基因编程爱好项目 我有一个函数 宏设置 当以 setq setf 形式评估时 将生成一个如下所示的列表 setq trees make trees 2 gt x abs x 然后它将绑定到 lambda 函数
  • 任意类型说明符上的 Defmethod?

    我想做的是 defgeneric fn x defmethod fn x integer 1 Positive integer defmethod fn x integer 1 Negative integer 我想要一个可以与任意类型说明
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • 有没有一种简单的方法可以使用 Common Lisp 中的 Python 库?

    在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库 包括标准库和第三方模块 CLPython 提供了 Python 功能的有限子集 这阻止了大多数库的使用 因此这对我来说并不是很有用 我希望能够从 Common
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人
  • gensym 在 Lisp 中做什么?

    我听到一些同学谈论他们如何使用该功能gensym为此 我问他们它做了什么 甚至在网上查了一下 但我真的无法理解这个函数的作用是什么两者都不为什么或何时最好使用它 特别是 我对它在 Lisp 中的作用更感兴趣 谢谢你们 独特且未被拘禁的符号
  • 评估 Common Lisp 宏的参数

    我想制作一个宏 其行为取决于它的参数之一 例如 defclass myvar l initarg l reader l defparameter mv1 make instance myvar l 10 defmacro mac1 v pr
  • 学习 LISP 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 是否有与 Add-MailboxPermission 等效的 REST(图形或其他)?

    现在我有一个 PS 脚本正在检查邮箱权限 如果缺少 则会添加权限 在 C 中 想调用以下等效项 获取邮箱权限 如果需要 添加权限 例如 添加MailboxPermission Identity email User AdminUserNam
  • 如何在 Bash 中重复一个字符?

    我怎样才能做到这一点echo perl E say x 100 您可以使用 printf 0s 1 100 这是如何运作的 Bash 扩展 1 100 所以命令变成 printf 0s 1 2 3 4 100 我已将 printf 的格式设
  • 如何使用 socket.io 将所有客户端重定向到另一个页面?

    我正在开发一款在线多人卡牌反人类游戏 React 在前面 React 路由器用于重定向 Node 在后面 当大厅中的一个用户时 我试图重定向 大厅 或房间中的所有客户端单击 开始 但现在只有单击开始的用户被重定向 这个想法是有人会设置一个新
  • 如何使用 scipy.spatial.Delaunay 将所有点包含到无错误三角网格中?

    我正在测试scipy spatial Delaunay并且无法解决两个问题 网格有错误 网格不包含所有点 代码和绘图图像 import numpy as np from scipy spatial import Delaunay delau
  • rsync 传输后删除发送端的文件

    我想从远程机器下载大量数据 我希望每次文件下载完成时都会删除远程计算机上的数据 我怎么做 rsync 是否有一个标志来执行此操作 您需要通过 remove source files的选项rsync命令 它说rsync从发送端删除属于传输一部
  • 如何配置 Jetty 在类更改时重新加载 WebAppContext

    我正在开发一个Web应用程序 当我在Eclipse下开发时 我运行Jetty作为开发和测试环境 当我对 Java 类进行更改时 Eclipse 会自动将它们编译到构建目录 但 Jetty 在我停止并启动服务器之前不会看到更改 我知道 Jet
  • Ant需要tools.jar但找不到它

    我正在为 Java 程序构建一个开发环境 在第一次尝试 Ant 构建脚本后 我收到了以下错误 Unable to locate tools jar Expected to find it in usr lib jvm java 6 open
  • 如何从 Rust 的 Cargo 中的集成测试访问二进制文件的函数

    在我的货运项目中 我定义了两个二进制目标 如何从集成测试访问二进制文件中定义的函数 package name passman version 0 1 0 edition 2018 bin name passmand path src dae
  • 访问 pyModbus 事务中的原始字节

    我有一个 python 脚本 可以使用 pymodbus 库处理 Modbus 事务 为了进行故障排除 我想打印发送和接收到设备的原始字节 最好以十六进制格式 这是简化的代码 请参阅底部的注释以获取我想要得到的示例 我使用了 TCP 客户端
  • gcc 4.3.4 支持 unique_ptr 吗?

    我一直在尝试在本地 CygWin 安装上使用 g 编译器来实现 PIMPL 并且我开始认为这可能是我正在运行 g 4 3 4 的事实 因为它的 C 11 支持少于完美的 使用非常基线的代码 来自 MSDNhere http msdn mic
  • Sharepoint:更新内容类型时,基于内容类型的列表会发生什么情况?

    我有一个假设性问题 至少现在是这样 假设我根据某些自定义内容类型创建列表 我将大约 1000 个项目添加到该列表中 正在生产中 然后客户来了 他说他需要修改该自定义内容类型 如果我修改自定义内容类型 列表会发生什么情况 它会自动更新吗 我怀
  • 避免数据框中的 KeyError

    我正在使用下面的代码验证我的数据框 df df df name issuer id service area id notnull all axis 1 df plan year notnull df plan year astype st
  • 当变量为 None 时,Django 设置默认模板标签输出?

    我正在寻找 django 设置或编程方式 使所有 django 模板标签在值为 None 时显示空字符串 例如 假设我有一些 django 模板 cat chases mouse 如果 cat 和 mouse 都为 None 它将呈现为 N
  • Bool 属性无法在 swift 中标记为动态

    我正在尝试观察Bool使用 KVO 并添加 swift 中的值dynamic像这样的修改器 dynamic var isRestricted Bool 编译器说 属性无法标记为动态 因为其类型无法在 Objective C 中表示 那我该怎
  • 如何使用自动装配的 Spring Boot 监听多个队列?

    我是 Spring Boot 的新手 正在尝试它 目前我已经构建了一些应用程序 我希望能够通过队列相互通信 我目前有一个侦听器对象 可以从特定队列接收消息 Configuration public class Listener final
  • 最新R版本的dplyr汇总功能问题

    在我之前的 R 版本中从未发生过以下情况 mtcars gt dplyr group by carb gt dplyr summarise N sum am 1 Error in summarise impl data dots envir
  • 域组的 Windows 身份验证到 Oracle

    我知道可以使用 操作系统身份验证 来对 Oracle 数据库中的 Windows 用户进行身份验证 该过程基本上是将当前 Windows 用户 ID 传递给 Oracle 进行身份验证 问题是 是否可以在 Oracle 中对域组进行身份验证
  • WKWebView 和 NSURLProtocol 不起作用

    使用旧的 UIWebView 时 您可以通过实现自定义 NSURLProtocol 来捕获请求 我用它来处理需要身份验证的请求 我尝试了相同的代码 它不适用于新的 WKWebView 但我的协议类根本没有被调用 有人遇到同样的问题还是有更好
  • Tkinter filedialog.askdirectory() 找不到外部驱动器

    I have made some folder synchronization program in the last week that I wanted to primarily deploy to have an easy way t
  • Common Lisp 中的未绑定变量

    我是 Lisp 新手 正在阅读 ANSI Common Lisp 第 8 章中的文本生成器示例 我按照该示例并在 LET 变量 prec 的范围内定义了一个函数 see let prec defun see symb let pair as