了解 LISP 中的绑定变量和自由变量

2024-03-22

我正在阅读SICP,又出现了绑定变量和自由变量的话题。然而,我对此感到困惑。术语“绑定变量”仅适用于形式参数变量吗?此外,文本还指出过程定义“绑定”其形式参数。这让我感到困惑,因为有些人说我们将值“绑定”到变量。显然,当我们谈论不同类型的变量时,该术语似乎意味着不同的事物。有人可以澄清什么是绑定变量以及绑定的含义吗?最后,与绑定变量相比,什么是自由变量?所有这些与范围有何关系?


只有两种类型的变量。全局和词汇。实际上,您可以将 global 视为词法范围的可变根,在这种情况下,只有一种类型的变量。

绑定变量是当前过程的形式参数,其他所有内容(无论是全局变量还是先前嵌套调用的绑定变量)都是自由变量。

Example:

(lambda (x)
  (let ((y (+ x x))) ; + is free x is bound
    (+ x y)))        ; + and x is free, y is bound

记住let是语法糖,所以它实际上与此相同:

(lambda (x)
  ((lambda (y)
     (+ x y)) ; + and x is free, y is bound
   (+ x x)))  ; + is free x is bound

在内部 lambda 中y作为绑定变量+ and x免费。在外层 lambda 中x是有界的并且+免费。+可能是全球性的。

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

了解 LISP 中的绑定变量和自由变量 的相关文章

随机推荐

  • 拥有一个 Activity 实例

    我的活动导航和返回堆栈有问题 我希望您能为我解决这个问题 问题 根 Activity gt gt gt SecondActivity gt gt HomeButton 然后 这将带我进入主页 然后我从那里选择 Gmail gt gt 消息
  • 在 makefile 中使用大括号进行变量扩展不起作用

    当我在 shell 上运行以下命令时 它可以正常工作 但如果我把它写在 Makefile 中并用 make 命令调用它 它就不起作用 cp wpa cli 请求者 密码 事件 usr local bin make 命令后出错 cp 无法统计
  • Docker build ARG 始终为空字符串

    我这里有一个 dockerfile FROM golang 1 13 alpine as build ARG DIR somevalue RUN echo DIR 输出是 Sending build context to Docker da
  • Cassandra 3 需要什么版本的 Java

    推荐的Java版本对于卡桑德拉 2 0 https stackoverflow com q 28912016 545127是 Java 7 但是 Cassandra 3 建议或需要哪个版本 具体来说 版本 3 5 一些信息表明需要 Java
  • XML:

    与问题类似 XML那个问号是什么意思 https stackoverflow com questions 39119165 xml what does that question mark mean例如 感叹号是什么意思 下面来自 的含义
  • PGAdmin 显示 Heroku 的数据库量过多

    我正在学习一些后端的东西 我在本地创建了一个测试数据库并填充了一些数据 然后使用以下命令将数据库转储到 SQL 文件 pg dump U USERNAME DATABASE no owner no acl f backup sql 最后将其
  • 在文件搜索中排除 Eclipse/Aptana 中查找的文件类型

    有没有办法在 Aptana 或 Eclipse 文件搜索中排除图像类型 我想搜索所有非图像文件 而不是指定我要搜索的所有文件类型 尝试添加一个 在您不想匹配的模式前面标记 put cgi pm sql 在文件名模式部分中 我正在使用 Ecl
  • 为什么接受数组的 C++ 模板并不比根据 GCC 5.3 和 Clang 4.0 接受指针的模板更专业?

    为什么接下来的两个模板声明不明确 因此两者都不比另一个更专业 我知道这个问题在 Stack Overflow 上已经被多次提出 但通常人们会回答如何解决歧义 而不是回答为什么会发生这种情况 I template
  • 在远程主机中:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]

    部署后 当我尝试发送邮件时出现以下错误 500 500内部服务器错误 Swift TransportException 无法与主机 smtp gmail com 建立连接 连接超时 110 堆栈跟踪 at in SF ROOT DIR li
  • Android 模拟器 - Wifi 错误

    我正在使用 Android SDK 模拟器广告尝试连接到网络 我无法在设置 gt 无线和网络中执行此操作 在我需要打开 WiFi 的地方 我收到 错误 怎么解决呢 Gorov 关闭模拟器 关闭以太网 火线和任何其他网络接口 他们全部 我的意
  • 在同一程序中调用 srand() 两次[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么当我在两个截然不同的点调用 srand 时会导致数字不是随机的 一旦我删除其中一个 它就会恢复正常 这取决于你如何称呼它 的目的sr
  • 在 JavaScript 中,如果我分配给一个具有 getter 但没有 setter 的对象属性,会发生什么情况?

    在下面的代码中 都使用了console log o x print 1 任务会发生什么情况o x 2 就这样被忽略了吗 var o get x return 1 console log o x 1 o x 2 console log o x
  • Java:在后台更新有大量行的 JTable

    我正在编写一个简单的 Java Swing 实用程序 它将从 MQ JMS 服务器读取消息并将它们显示在 JTable 中 private void getMessages try if null Queue Queue close Clo
  • 如何隐藏 emacs 创建的备份文件?

    我在使用 vi 很长时间后才开始使用 emacs 让我烦恼的一件事是 每当我修改文件 保存它并退出 emacs 时 我都会看到在同一目录中创建一个名为filename 如果我编辑的文件是filename 有什么办法可以摆脱这个吗 或者隐藏这
  • 将预测与 svyglm 结合使用

    我发现了一些奇怪的行为predict和svyglm对象从survey包裹 如果你的新数据在predict具有一个级别的因子 字符会输出错误 Error in contrasts lt tmp value contr funs 1 isOF
  • 如何使用 Ruby MiniTest::Spec 和 Rails 进行 API 集成测试?

    我正在构建一个包含 Rails API 的应用程序 并希望使用 Ruby MiniTest Spec 进行测试 有什么好的设置方法吗 例如 良好的目录组织 包含文件的良好方式等 我正在使用 Rails 3 In Action 一书中的指南
  • 在 Windows 上使用 Emacs 编译 C++ 程序

    我已经使用 Emacs 进行基本文本编辑有一段时间了 但从今天开始 我尝试使用它进行 C 编译 在过去的几个小时里 我一直在寻找如何解决这个问题 但我在他们的技术中不断遇到障碍 我认为其中一些与教程过时有关 基本上 我想做的就是能够通过 M
  • FCM/GCM JSON 有效负载 - 如何指定大图标?

    我正在使用 firebase 端点发送推送通知 它正在成功运行 我正在使用邮递员将请求发送到 FCM 我的问题是我不明白如何发送大图标 FCM 有两种可以发送的有效负载 数据有效负载和通知有效负载 See here https fireba
  • Web 控制浏览器后退按钮

    我正在使用导航 2 和setUrlStrategy PathUrlStrategy 我添加了WillPopScope但是onWillPop单击浏览器的后退按钮时不会调用 Widget build context return WillPop
  • 了解 LISP 中的绑定变量和自由变量

    我正在阅读SICP 又出现了绑定变量和自由变量的话题 然而 我对此感到困惑 术语 绑定变量 仅适用于形式参数变量吗 此外 文本还指出过程定义 绑定 其形式参数 这让我感到困惑 因为有些人说我们将值 绑定 到变量 显然 当我们谈论不同类型的变