【问题标题】:scheme `promise?` Dr Racket, geiser计划“承诺?” Racket 博士,geiser
【发布时间】:2015-07-21 04:47:06
【问题描述】:
Welcome to DrRacket, version 6.0 [3m].
Language: racket; memory limit: 128 MB.
> promise?
#<procedure:promise?>
> (promise? (delay (+ 1 2)))
#t

我需要使用 R5RS 并且正在处理延迟评估...这里在 emacs 中使用 geiser:

racket@> (require r5rs)
racket@> (cons 1 '())
(mcons 1 '()) ;; this is how racket represents a r5rs cons
racket@> (define x (delay (+ 1 2)))
racket@> x
#<promise>
racket@> (promise? x)
#f ;; what is going on here???
racket@> promise?
#<procedure:promise?>

当然上面的代码(promise? x)应该返回#t... 我注意到当我在 DrRacket (gui) 中切换到 R5rS 时,出现以下错误。有人可以解释发生了什么吗?我以为promise? 是为R5RS 定义的。还是我弄错了?

Welcome to DrRacket, version 6.0 [3m].
Language: R5RS; memory limit: 128 MB.
> promise?
. . promise?: undefined;
 cannot reference undefined identifier
> 

【问题讨论】:

    标签: promise racket r5rs


    【解决方案1】:

    R5RS 中没有promise?。构造 delay 产生一个表示承诺的值,但由实现者决定如何表示承诺。一些实现选择将它们表示为闭包。 Racket 中的 R5RS 实现选择使用名称为 promise? 的结构。这就是为什么您看到的承诺值打印为#&lt;promise&gt;

    我怀疑 R6RS 也有类似的情况。

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2018-11-07
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多