gpt4 book ai didi

scheme - Scheme 中定义表达式返回的值

转载 作者:行者123 更新时间:2023-12-01 10:32:27 32 4
gpt4 key购买 nike

我在 MIT/GNU Scheme 中运行了这个:

(define x (+ 2 3))

然后解释器打印:

;Value: x

但是根据我的教科书,define 表达式返回的值应该是未定义的。为什么解释器会打印“;Value: x”?

最佳答案

如果标准报告未指定返回值或提到它是未定义的,则实现实际上可以自由选择返回值,并且它会符合标准。这也意味着您不能依赖一个实现行为与另一个实现行为相同。

以R6RS为例:

(if #f #t) ; ==> "banana"

...完全正确。由于谓词的计算结果为 #f 并且没有提供替代表达式,因此实现选择字符串 "banana" 作为其结果。有点不合常规,但仍然是一个非常不错的值未在标准中定义

选择可以使用的合理值可能会给用户带来不好的想法,当他们在不同但符合标准的实现中运行时,可能会愚弄他们制作错误的代码。因此,您有许多实现实际上将一个值定义为唯一未定义的值,它将用于代替报告中的所有未定义值,并且经常被 REPL 忽略。

下面是一些在不同实现中评估 (list (if#f#t)) 的例子。将它包装在一个 list 中使 REPL 显示一个列表,其中包含一个可能被隐藏的值:

;; racket in r5rs
==> (#<void>)

;; chicken
==> (#<unspecified>)

;; ikarus
==> (#<void>)

;; gambit
==> (#!void)

;; mit-scheme
==> (#!unspecific)

;; biwa
==> (#<undef>)

关于scheme - Scheme 中定义表达式返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41213786/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com