寻求有关 SICP 练习 1.5 的一些解释

2023-11-26

问题可以找到here.

在书中,我发现对正常订单评估的描述是:

“另一种评估模型在需要操作数的值之前不会评估操作数。相反,它会首先用操作数表达式替换参数,直到获得仅涉及原始运算符的表达式,然后执行评估。”

我还发现了另一个简短的描述:“充分扩展然后缩小”。

在练习中,我认为定义p是这样的(lambda () (p)), 它永远不会扩展为原始运算符,因此永远不会终止。

然而,另一方面,在谷歌搜索这个问题的一些答案后,似乎正常的顺序评估应该终止,因为它只根据需要评估事物,并且实际上(p)不会被评价。

所以我认为“扩展”和“评估”之间一定有一些区别,解释器在这里所​​做的是评估事物。

到底有什么区别,或者 我是否遗漏了一些要点?

另一个问题:我应该说“(p)被评估为(p)" or "(p)被扩展为(p)"?


你是对的,如果要求评估,应用顺序评估器不会终止(p)。然而,手头的问题提到if具有由应用和正常顺序求值器共享的特定求值语义。具体来说,“假设无论解释器使用正常顺序还是应用顺序,特殊形式 if 的求值规则都是相同的:首先对谓词表达式求值,然后根据结果确定是对后继表达式还是替代表达式求值。”

练习中的代码是

(define (p) (p))

(define (test x y)
  (if (= x 0)
    0
    y))

正在考虑的测试是

(test 0 (p))

正态顺序评估是“完全扩展然后减少”选项。在正态顺序评估下,(test 0 (p))完全展开为

(test 0 (p)) ==
(if (= 0 0)
  0
  (p))

Since if具有上述语义,扩展中的测试条件为(= 0 0),这是正确的,正常顺序评估器决定评估结果,即0,所以表达式的值为0.

Using the applicative-order evaluation however, the first step in evaluating (test 0 (p)) is to evaluate the expressions test, 0, and (p), and then call ("apply", hence "applicative") the value of test with the values produced by evaluating 0 and (p). Since the evaluation of (p) will not complete, neither will the evaluation of (test 0 (p)).

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

寻求有关 SICP 练习 1.5 的一些解释 的相关文章

  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • 方案中的多维向量?

    我之前问过一个关于方案中数组的问题 结果它们被称为向量 但在其他方面基本上与您期望的相同 有没有一种简单的方法可以在 PLT 方案中处理多维 arrays 向量 出于我的目的 我想要一个名为make multid vector或者其他的东西
  • 方案中的尾递归幂函数

    我在方案中编写尾递归幂函数时遇到问题 我想使用辅助函数来编写该函数 我知道我需要一个参数来保存累计值 但在那之后我就陷入了困境 我的代码如下 define pow tr a b define pow tr h result if b 0 r
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 方案如何返回多个值?

    我注意到几乎所有方案函数只能返回一个列表作为输出 下面 我想返回邻居的所有相邻节点的多个值 define neighbors l w if and 1 l 1 w list and l 1 w and 1 l w how to output
  • 为什么在 emacs-lisp 中的函数参数之前使用#'?

    我熟悉 Emacs Lisp 但不熟悉 Common 或任何其他 Lisp 一些 Lisp 程序员建议 例如emacs 的基本功能 https stackoverflow com questions 17076646 a basic fun
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要
  • 什么是 S 表达式

    所有 Lisp 开发人员似乎都知道什么是 S 表达式 但有人能为非 Lisp 开发者解释一下这一点吗 已经有一个维基百科条目 https en wikipedia org wiki S expression https en wikiped
  • 可扩展的宏定义

    灵感来自于评论区 https stackoverflow com questions 23879410 is it possible to extend a function lambda macro in scheme 23879575
  • 递归分割列表函数 LISP

    split list 函数接受一个列表并返回一个由两个列表组成的列表 其中两个列表由输入的交替元素组成 我写了以下内容 defun split list L cond endp L list NIL NIL t let X split li
  • 如何在 DrScheme 中包含文件?

    我正在使用 DrScheme 来完成 SICP 并且我注意到某些程序 例如 square 一遍又一遍地使用 我想将它们放在一个单独的文件中 以便我可以将它们包含在其他程序中 而不必每次都重写它们 但我似乎不知道如何做到这一点 我试过了 lo
  • 忽略 Racket 中的多个返回值

    在 Racket 中 可以通过执行以下操作从函数返回多个值 define foo values 1 2 3 然后我们可以通过这样做来绑定它们 define values one two three foo Now one一定会1 two t
  • 使用Lisp或Scheme进行Java程序的运行时配置

    我现在看到几个项目在实际配置取决于仅在运行时可用的东西时结束 配置 Java 程序的典型方法是根据某些应用程序特定规则读取一个或多个属性文件 然后根据它们的值采取操作 在某一时刻 这种情况会崩溃 您需要在配置中使用实际的程序逻辑 然后可以用
  • 关于onlisp中的广义变量

    我不确定这里发生了什么 文中的宏观示例 基本上不知道如何使用get setf 方法 一个内置宏 也许是函数 具体来说 如果某些返回值是这样的情况呢 get setf 方法为零 例如 get setf 方法 x NIL NIL NEW 306
  • Scheme 和 Common Lisp 之间的实际区别是什么? (或任何其他两种 Lisp 方言)

    注意 我并不是在问学哪个 哪个更好或者诸如此类的问题 我选择了 SICP 的免费版本 因为我觉得它读起来很好 我听说过有关它的好东西 并且我对编程的这一方面很感兴趣 我知道Scheme 是Lisp 的一种方言 我想知道 Scheme 和Co
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • 内置方案以检查列表包含情况

    在Python中 我可以执行 x in list 来查看列表是否包含x 方案中是否有等效的内置功能可以做到这一点 The R5RS http schemers org Documents Standards R5RS HTML r5rs Z
  • Common Lisp 中的原子和 Clojure 中的原子有什么区别?

    下列page http clojure org atoms讨论原子在 Clojure 中的工作原理 它并没有详细说明 Clojure 和其他 lisp 方言中原子之间的差异 Common Lisp 中的原子和 Clojure 中的原子之间的

随机推荐

  • Google Maps API v3 - 类型错误:表达式“google.maps.LatLng”的结果[未定义]不是构造函数

    我正在创建一个静态 html 页面来显示数据中的多个位置 我刚刚复制了其中一个示例并正在向后工作 但我在 Safari 检查器中收到以下错误 main js 1SyntaxError Parse error sample htm 10Typ
  • 如何检查字符串是否包含数字

    我需要检查字符串是否包含数字 任何数字 不是字符串是否是数字 而是它是否包含数字 例子 测试 没有数字 test2 包含数字 Using a 正则表达式 SELECT FROM test WHERE REGEXP LIKE testcol
  • 在 SQL Server 中使用“透视”将行转换为列

    我已经阅读了 MS 数据透视表上的内容 但在正确执行此操作时仍然遇到问题 我有一个正在创建的临时表 我们会说第 1 列是商店编号 第 2 列是周数 最后第 3 列是某种类型的总数 此外 周数是动态的 商店编号是静态的 Store Week
  • 如何编译 ffmpeg 以仅获得 mp3 和 mp4 支持

    我正在构建 Electron 应用程序 并使用 ffmpeg 将 m4a 或 webm 文件转换为 mp3 并将仅视频 mp4 与 m4a 音频文件合并为 mp4 我可以使用 media autobuild suite 来实现这一目标 ht
  • 关于设计模式:什么时候应该使用单例?

    荣耀的全局变量 成为荣耀的全局类 有人说打破了面向对象的设计 给我一些场景 除了好的旧记录器之外 使用单例是有意义的 在我探寻真相的过程中 我发现使用单例的 可接受 的理由实际上很少 互联网上反复出现的一个原因是 日志记录 类 您提到过 在
  • Asp.Net MVC 2下拉列表显示System.Web.MVC.SelectListItem

    我有一个包含 EquipmentID 列表的表和另一个包含维护记录的表 当用户编辑维护记录时 我希望有一个包含表中所有设备 ID 的下拉列表 下拉列表填充 并且填充了正确数量的条目 但是他们都说System Web MVC SelectLi
  • 视口标签在 Chrome 上不起作用

    我正在 Chrome 中使用设备指标覆盖来测试较小分辨率 本例中为 320x480 的响应式网站 在这种情况下 我的视口元标记不会对页面产生任何影响 徽标会显得很小 而且完全无法辨认 或多或少 我会说我看到的一切都是 0 5 比例的 这是我
  • 谷歌地图,cellid 到位置

    根据这个样本 http www codeproject com KB mobile DeepCast aspx 发送 cellid 信息 MCC MNC towerid 等 时可以请求 GPS 坐标 经度和纬度 包括范围 有人可以告诉我请求
  • chrome localstorage 中的 google_experiment_mod 是什么意思

    我正在 Chrome 本地存储中存储一些项目 连同我的变量我可以看到 google experiment mod 335 我想知道这意味着什么 下面是存储项目的代码 我使用 chrome 开发人员工具来查看内容 localStorage s
  • 在 C# 中访问成员时,“this”关键字是可选的吗?

    我注意到 如果类中有私有成员 则只需引用它的名称即可在类方法中访问它 你不需要说this memberName just memberName作品 那么 this 关键字在成员访问的上下文中是可选的吗 我确实认为当您想要澄清范围时 当您有两
  • 如何异步调用 WebViewClient.shouldInterceptRequest

    我想创建一个 Intranet 应用程序 该应用程序将显示通常只能在我们的内部环境中访问的内容 例如http intranet ourfirm com 现在我们可以从外部访问此内容 例如https ourproxy com ourIntra
  • 如何从 Azure 应用服务设置 mailSettings - 应用程序设置

    电子邮件服务器的当前设置已签入版本控制
  • kotlin int 盒装身份

    在文档中我们有 请注意 数字装箱不会保留身份 但接下来的例子给出了不同的结果 val number1 127 val b1 Int number1 val b2 Int number1 print b1 b2 this prints tru
  • 如何使用express 4.x获取ip客户端

    我想获取客户端的 IP 我正在尝试使用 localhost 127 0 0 1 但我总是得到 1 我正在尝试使用 app enable trust proxy app set trust proxy loopback app get fun
  • 分支预测与分支目标预测

    我理解得对吗 if语句更依赖于分支预测 v表查找更依赖于分支目标预测 关于v表 没有 分支预测 只有目标预测 尝试了解 CPU 如何处理 v 表 分支预测是预测分支是否会出现taken 分支目标预测就是预测where分行要去 这两件事是独立
  • 如何在 MySQL 中执行 FULL OUTER JOIN?

    我想做一个完全外连接在 MySQL 中 这可能吗 是一个完全外连接MySQL 支持吗 你没有完全连接在 MySQL 中 但你可以确定效仿他们 求一个代码sample转录自这个堆栈溢出问题你有 有两个表 t1 t2 SELECT FROM t
  • 类似于iPhone上的短信应用程序的文本输入框

    我在尝试获取像短信应用程序中那样的输入框时遇到了麻烦 任何人都可以提供一些关于如何构建其中之一并使其看起来不错的指导吗 我需要一个形状与 UITextfield 类似的输入框 但在打字时会垂直拉伸 我假设我需要计算文本的宽度并在文本换行时垂
  • UIButton按下后弹出UIDatePicker

    如何在按下 UIButton 后使 UIDatePicker 弹出 动画 然后在选择日期后再次关闭 这是在 iPhone 上 canihazcode 是的先生 谢谢你帮我拖延时间 void changeDate UIDatePicker s
  • 由于上传亚马逊服务项目而出现 SSLException

    我将文件从 android 上传到 aws 服务 我这样配置 AwsMetadata awsMetadata resultData getParcelable Params CommandMessage EXTRA MESSAGE AWSC
  • 寻求有关 SICP 练习 1.5 的一些解释

    问题可以找到here 在书中 我发现对正常订单评估的描述是 另一种评估模型在需要操作数的值之前不会评估操作数 相反 它会首先用操作数表达式替换参数 直到获得仅涉及原始运算符的表达式 然后执行评估 我还发现了另一个简短的描述 充分扩展然后缩小