Scheme 当条件为false时,`when`返回什么?

Scheme 当条件为false时,`when`返回什么?,scheme,conditional,evaluation,guile,Scheme,Conditional,Evaluation,Guile,它的计算结果确实是#t,但它是什么?更新:上面说:“当…测试的计算结果是#f,表达式的值没有指定。”因此它可能是任何东西,并且不应该被任何东西依赖 它返回的值不是null?,不是boolean?,也不是pair?: scheme@(guile-user)> (define val (when #f 1)) scheme@(guile-user)> val scheme@(guile-user)> (null? val) $6 = #f scheme@(guile-user)&

它的计算结果确实是
#t
,但它是什么?

更新:上面说:“当…测试的计算结果是
#f
,表达式的值没有指定。”因此它可能是任何东西,并且不应该被任何东西依赖


它返回的值不是
null?
,不是
boolean?
,也不是
pair?

scheme@(guile-user)> (define val (when #f 1))
scheme@(guile-user)> val
scheme@(guile-user)> (null? val)
$6 = #f
scheme@(guile-user)> (boolean? val)
$7 = #f
scheme@(guile-user)> (pair? val)
$8 = #f
scheme@(guile-user)> (when val 1)
$9 = 1
它不是一个
#f
,这可以从

scheme@(guile-user)> (null? val)
$6 = #f
scheme@(guile-user)> (boolean? val)
$7 = #f
scheme@(guile-user)> (pair? val)
$8 = #f
它打印出来的时候什么都没有

scheme@(guile-user)> (when val 1)
$9 = 1
那是什么呢?值由其交互作用定义。它在特定实现中的内部表示并不那么重要

简而言之,这是一个“不是价值”。(原文如此)

Chez计划:

(定义val(当#f 1时))
(显示值)
; 输出:
#

因此,如果它不是一个值,为什么在它里面会说“要定义一个新变量,你可以使用Scheme的定义语法如下:
(定义变量名值)
这会生成一个名为
变量名
的新变量,并将
作为变量的初始值存储在其中。”?@Renzo显然,我更富有诗意,而不是严谨也许这“不是一个可以在任何地方使用的价值”。与空指针意义不同的特殊类型的值实际上不是指针。我不知道。:)好吧,我只是好奇而已!但事实上,这并没有改变任何事情
(当#f 1)
必须返回某物;但它不应该返回任何有价值的东西。这可怜的事怎么办?返回一个特别的东西,其实什么都不是。我发现Chez模式与表达式返回的值更为一致(这几乎是一个普遍的情况):表达式返回的是一个被称为值的东西,无论是#或#null或NIL或()或其他什么,它在语言的数据系统中起着某种作用。否则变量
val
与某个不是值的对象相关联(但如果变量被初始化,则初始化为值…)
scheme@(guile-user)> val
scheme@(guile-user)> 
(define val (when #f 1))
(display val)
; Output:
#<void>