寻求有关 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 的一些解释 的相关文章

  • 对方案中的列表进行排序

    如何编写一个排序算法 以升序返回列表 ex 1 3 5 2 9 回报 1 2 3 5 9 大多数Scheme 实现都附带一个对列表进行排序的过程 如果您的实现没有提供这一功能 那么为您提供一个并不困难 下面是快速排序算法的实现 gt def
  • 如何在类Unix操作系统下方便的运行SBCL代码?

    David James 写了问题和答案 我将对其进行编辑以符合 Stackoverflow 标准 使用 SBCL 您可以将 Lisp 代码编译为机器代码 像 Java net C 甚至 C 一样 您将需要运行时 所以有两种方法来编译 Com
  • R 的 C API 中的 SEXP 数据类型到底是什么以及为什么使用它? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道关于 SEXP 的维基百科页面 并且我知道它代表符号表达 我 模糊地 知道 SEXP 是指 Lisp 中的树数据结构的符号 但我
  • 方案中的延续传递风格?

    我遇到了这段代码在维基百科上 http en wikipedia org wiki Continuation passing style define pyth x y k x x lambda x2 y y lambda y2 x2 y2
  • 以下函数式编程模式的正确术语是什么?

    我听说它被称为stream http mitpress mit edu sicp full text sicp book node72 html as an 无限列表 http en wikibooks org wiki Clojure P
  • 删除重复项并对列表进行排序

    我正在尝试编写一个过程 该过程采用一个可能包含或不包含重复项的列表 然后按排序顺序返回没有重复项的列表 到目前为止我想到的是 define remove duplicated list if null list if car list ca
  • Common Lisp 类型声明未按预期工作

    当我在 Common Lisp 中定义一个函数时 如下所示 defun foo n declare type fixnum n n 42 我期待一个像这样的电话 foo a 立即失败 但在调用时失败 是个declareform 不保证静态类
  • 查找 lambda 表达式中的自由变量

    有谁知道如何找出 lambda 表达式中的自由变量 自由变量是不属于 lambda 参数的变量 我当前的方法 这对我毫无帮助 是简单地使用 car 和 cdr 来遍历表达式 我的主要问题是确定一个值是否是一个变量或者它是否是方案原语之一 有
  • 在Scheme中插入二叉树

    我想知道如何将列表中的元素插入二叉搜索树 我想知道为什么下面的代码不能按我的预期工作 输出是 4 1 5 13 6 我的下一个问题是对列表中的元素进行排序 但现在我只想插入它们 我的输出对于我所说的问题是否正确 我的代码如下 define
  • 如何找到 MIT 方案中出现错误的地方?

    当你在 MIT 方案中遇到错误时 它不会告诉你错误发生在哪里 例如 它只打印如下内容 Unbound variable top left To continue call RESTART with an option number REST
  • elisp:有没有办法获取当前 .el 模块的名称(如 C 中的 __FILE__ )?

    在我的 elisp 模块的顶部 我想做一些简单的事情 message concat Loading expand file name current elisp module 您可以使用变量load file name https www
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • 宏扩展可以包含(声明...)表达式吗?

    Common Lisp Hyperspec 规定 宏形式不能扩展为声明 声明表达式必须显示为它们引用的形式的实际子表达式 我对 扩展到 的含义感到困惑 由于显而易见的原因 如下宏将不起作用 defmacro optimize fully d
  • 方案:为什么内部定义比外部定义快?

    我尝试运行下面的程序 define odd internal x define even x if zero x t odd internal sub1 x if zero x f even sub1 x define odd extern
  • 在 Java Runtime.getRuntime().exec(...) 中使用引号和双引号

    我正在尝试在 Mac OSX 中从 Java 启动 Lisp 映像 使用控制台中的图像 我输入以下内容 lisp image eval package method some argument 一切都运行良好 在Java中 我在使用传递引号
  • 方案语言:合并两个数字

    如何将列表中的两个整数合并为一个 方案中 例子 11 223 gt 11223 假设列表恰好有两个元素 并且都是数字 define merge numbers lst let 1st number gt string first lst 2
  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • 为什么 LISP 中符号名称中的连字符是约定俗成的?

    这个推荐的理由是什么 为什么不与使用下划线的其他编程语言保持一致 我认为 LISP 使用连字符有两个原因 历史 和 因为你可以 History LISP 是一种古老的语言 在早期输入下划线可能会很困难 例如 我用于 LISP 的第一个终端是
  • gensym 在 Lisp 中做什么?

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

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

随机推荐

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