方案,SICP,R5RS,为什么延迟不是特殊形式?

2023-11-21

这是关于 SICP 的第 3.5 章,其中正在讨论流。这个想法是:

(cons-stream 1 (display 'hey))

不应该评估 cons-stream 的第二部分,因此它不应该打印“hey”。这确实发生了,我得到以下输出:

嘿(1.#)

所以我的结论是延迟不是作为一种特殊形式来实现的?或者我做错了什么?我使用以下实现:

(define (cons-stream a b) 
  (cons a (delay b)))

延迟是默认的 R5RS 实现。这是实施过程中的错误,还是我没有正确执行或理解它?


You do创造一个承诺,但这个承诺是在你的内心创造的cons-stream,这意味着为时已晚并且表达式已经被求值。尝试这个:

(define (foo x)
  (display "foo: ") (write x) (newline)
  x)

(cons-stream 1 (foo 2))

你会发现它评估得太早了。出于同样的原因,这个:

(define ones (cons-stream 1 ones))

当你的cons-stream是一个函数。所以事情是这样的delay是一种特殊形式,但自从您定义以来您就没有使用它的功能cons-stream作为一个简单的函数。你必须定义cons-stream如果你想制作一个宏it也以同样特殊的方式行事。例如:

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

方案,SICP,R5RS,为什么延迟不是特殊形式? 的相关文章

  • 有没有办法检查一个列表的所有元素是否都包含在球拍的另一个列表中?

    我想要一个执行类似操作的函数 gt function 1 2 3 4 1 2 3 4 5 t 在这种情况下返回 t 因为第一个列表的所有元素都包含在第二个列表中 有没有一个函数可以做到这一点而不必担心顺序 在这种情况下 您不会将列表进行比较
  • 了解 LISP 中的绑定变量和自由变量

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

    我正在尝试实现一个计算 list 的函数 其名称是sum define sum elemList if null elemList car elemList sum cdr elemList 0 上面的实现给出了错误的结果 例如 gt su
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • 为什么我的 Scheme 函数返回错误“应用程序:不是过程”?

    我想获得 a b c 的第二个值 但我不想使用 cadr 我可以得到正确的答案 car cdr a b c b 但是当我构建该函数时 define test lambda list car cdr list test a b c 我收到以下
  • 经验丰富的计划者的 get-first、get-next 和 waddle 函数

    define get first lambda l call with current continuation lambda here set leave here waddle l leave quote define get firs
  • 访问Scheme中的调用堆栈深度

    为了演示尾递归的有效性 我想要一种在Scheme中动态访问调用堆栈深度的方法 有没有办法做到这一点 如果没有 有没有办法在其他主要函数语言 OCaml Haskell 等 中做到这一点 Racket 允许您在调用堆栈中存储值 您可以使用它来
  • 不知道如何解决 SICP 练习 1.11

    练习1 11 http mitpress mit edu sicp full text book book Z H 11 html thm 1 11 一个功能f由以下规则定义f n n if n lt 3 and f n f n 1 2f
  • 如何解释方案表达式 '(a 'b)

    a b 给出答案 a b 当 a 没有绑定 未加引号 时 这是如何工作的 这就是我们计算表达式时发生的情况 a b gt a b The quote 是简写quote http docs racket lang org guide quot
  • Scheme 和 Racket 中嵌套引号的行为

    在 Racket 中编写函数时 我不小心在符号前面放了两个单引号而不是一个 即我不小心写了 a 并发现嵌套引号的一些行为看起来很奇怪 我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试 wr
  • Letrec 和可重入延续

    有人告诉我 以下表达式的计算结果为 0 但许多方案的实现将其计算为 1 let cont f letrec x call with current continuation lambda c set cont c 0 y call with
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • 从when语句内的函数返回

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

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

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

    如何返回第一个n列表的元素 这是我所拥有的 define returns lambda list n cond null list 0 n n 1 car list cons car list returns cdr list n else
  • 如何在mit-scheme中正确使用(读取)?

    我在文档和 Rosetta 代码中读到 read 用于从控制台获取输入 所以我写了这段代码来检查这一点 display read 1 但 mit scheme 从不要求用户输入 程序就会终止 为什么会这样呢 在 REPL 中 display
  • 方案中的配对组合

    我试图找到可以使用方案中的 N 对列表进行的各种组合 这是我到目前为止所处的位置 define pair combinations list of pairs if null list of pairs nil let first caar
  • Racket 与Scheme 有何不同?

    Racket 是Scheme 的后代 Racket 与 R6RS 有何不同 它添加了什么 删除了什么 或者只是有所不同 我知道 Racket 不仅仅是一种语言 它还是一个语言平台 但我指的是主要的 Racket 方言 Racket 最终基于

随机推荐

  • Windows.Web.Http.HttpClient 超时选项

    由于 SSL 证书问题 我们在应用程序服务层中使用 Windows Web Http HttpClient API 我为我的项目引用了以下示例 http code msdn microsoft com windowsapps HttpCli
  • 如何从 WCF REST 方法返回自定义 HTTP 状态代码?

    如果 WCF REST 调用中出现问题 例如找不到请求的资源 我如何在我的 OperationContract 方法中使用 HTTP 响应代码 例如 将其设置为 HTTP 404 之类的代码 有一个WebOperationContext您可
  • 如何在 C# 中通过 XML 序列化输出十六进制数字?

    我有一些类和结构 我使用 XML 序列化来保存和调用数据 但我想要的一个功能是以十六进制表示形式输出整数 我可以在这些结构上添加任何属性来实现这一点吗 有一点代码味道 但以下内容will work public class ViewAsHe
  • C# Windows 窗体中的状态栏

    我找不到用于实现状态栏的控件 我怎样才能手动完成呢 我认为您正在寻找 StatusStrip 控件 这是一篇关于它的文章 这是一个MSDN 文章
  • 如何在 Nuxt 中使路由区分大小写

    我使用 nuxt js vue js 我需要创建路由器区分大小写 我发现以下属性 caseSensitive 我试图将其放入 nuxt config 但它不起作用 可以通过大写的链接进行转换 如果我直接更改文件 project nuxt r
  • 如何在R中用多边形裁剪世界地图?

    我导入了世界地图数据集www GADM org使用 R 包栅格 我想将其剪切到我创建的多边形中以减小地图的大小 我可以检索数据并且可以毫无问题地创建多边形 但是当我使用 gIntersection 命令时 我收到一条晦涩的错误消息 关于如何
  • JavaMail 与 Gmail:535-5.7.1 用户名和密码不被接受

    当我尝试使用 JavaMail API 发送邮件时收到错误 并且我确信用户名和密码 100 正确 我连接的 Gmail 帐户是一个较旧的帐户 因为他们说它需要时间才能与新帐户一起使用 收到错误 DEBUG SMTP RCVD 535 5 7
  • 无法初始化类 com.amazonaws.partitions.PartitionsLoader

    使用 Eclipse Mars 我已经通过帮助安装软件添加了 aws java sdk 1 11 123 现在 当我运行 Tomcat Server 7 时 出现此错误 May 02 2017 11 57 32 PM org apache
  • C++内部如何实现多态性?

    尊敬的先生 我应该告诉你关于所提出的问题我知道什么和不知道什么 以便你可以解决我理解的薄弱环节 我知道c 通过使用Vtable 指针数组 来实现多态性 每个指针都指向类的虚函数 层次结构中的每个类都有一个虚函数表 现在假设我有以下课程 cl
  • Erlang 函数的返回值

    下面的函数会返回什么 好的原子还是Cmd function test gt Cmd os cmd ls io format The result of ls is p n Cmd 如果它返回 ok 那么应该如何改写以返回 Cmd 同时仍然使
  • CryptoAPI:使用 CryptVerifySignature 使用公钥验证来自 openssl 的签名

    我正在尝试移植水族总理Mac 到 Windows 的框架 在 Mac 上 它使用 openssl 库 我尝试了解如何将其移植到 Windows 我猜我必须使用 CryptoAPI 我主要需要使用给定的公钥验证生成的签名的代码 以下是使用 o
  • JS、图像和CSS被HTTPModule拦截

    我有一个简单的 HTTPModule 它执行一些自定义会话状态管理 public void Init HttpApplication context context AcquireRequestState new EventHandler
  • 使用标准化表真的更好吗?

    我听到我的团队领导说 在过去的一些项目中 他们必须取消标准化以使查询更快 我认为这可能与表联合有关 拥有更多的瘦表真的比拥有很少的胖表效率低吗 这取决于 连接表本质上比拥有一个 预连接 即非规范化 的大表慢 然而 通过非规范化 您将创建数据
  • 如何判断两个多边形是否相交?

    想象一下 我有 4 个点的坐标 它们形成一个多边形 这些点在 C 中使用 PointF 表示 如果我有 2 个多边形 使用 8 个点 我如何判断它们是否相交 矩形类有一个名为 IntersectsWith 的方法 但我找不到与 Graphi
  • 预编译 JDBCPreparedStatement 有什么作用?

    预编译 语句有什么作用 因为我已经看到了 如果我使用错误的 SQL 语法编写准备好的语句 编译不会报告 任何问题 那么 如果预编译准备好的语句不检查语法有效性 那么它到底做了什么 创建一个PreparedStatements可能涉及也可能不
  • Nokogiri 需要 Ruby 版本 < 2.3

    我正在尝试让 Rails 在 Windows 10 上工作 我正在使用 Ruby 2 3 0 和 Rails 4 2 6 并且暂时使用 Nokogiri 1 6 3 当我尝试跑步时rails new demo 它返回一个错误 An erro
  • akka.net 有没有办法获取或创建 actor

    对于我的 Actor 层次结构 在通过几个 Actor 处理数据之前 我不知道所需的所有 Actor 因此我正在寻找一种方法来返回现有 ActorRef 或创建新操作 这就是我希望下面的代码要么创建一个演员 如果 my id 1 不存在 要
  • 在插入或拖动“和”放置顺序更改后重新索引对象数组的算法

    假设我有一个对象的索引数组 例如包含一首流行民歌的歌词的对象 var lyrics line 2 words He s a lumberjack and he s okay line 1 words I m a lumberjack and
  • ClassCastException:android.widget.LinearLayout$LayoutParams

    因此 我在 FinderActivity class 中执行适配器时收到此错误 public class FinderActivity extends ListActivity private List
  • 方案,SICP,R5RS,为什么延迟不是特殊形式?

    这是关于 SICP 的第 3 5 章 其中正在讨论流 这个想法是 cons stream 1 display hey 不应该评估 cons stream 的第二部分 因此它不应该打印 hey 这确实发生了 我得到以下输出 嘿 1 所以我的结