当条件为假时,`when` return 是什么意思?

What does `when` return when the condition is false?

scheme@(guile-user)> (define val (when #f 1))
scheme@(guile-user)> val
scheme@(guile-user)> (null? val)
 = #f
scheme@(guile-user)> (boolean? val)
 = #f
scheme@(guile-user)> (pair? val)
 = #f
scheme@(guile-user)> (when val 1)
 = 1

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

更新:docs 说:"When ... the test evaluates to #f, the value of the expression is not specified." 所以它可能是任何东西,不应该依赖于任何东西。


它 returns 不是 null?boolean?pair? 的值:

scheme@(guile-user)> (null? val)
 = #f
scheme@(guile-user)> (boolean? val)
 = #f
scheme@(guile-user)> (pair? val)
 = #f

它不是 #f

证明了这一点
scheme@(guile-user)> (when val 1)
 = 1

打印什么都没有,

scheme@(guile-user)> val
scheme@(guile-user)> 

那是什么? 一个值是由它的交互定义的。它在特定实现中的内部表示并不那么重要。

简而言之,它是 "not a value"。 (原文如此)

Chez 计划 prints it as #<void>:

(define val (when #f 1))
(display val)
; Output:
#<void>

Guile 2.0.13 在 ideone.com prints it as #<unspecified>.