当条件为false时,"when"返回什么


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

它确实评估为#t,但它是什么?

update:docs说:"当…测试评估为#f时,没有指定表达式的值。">所以它可能是任何东西,不应该依赖于任何东西。


它返回一个不是null?、不是boolean?、也不是pair?:的值

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

证明它不是#f

scheme@(guile-user)> (when val 1)
$9 = 1

打印为空,

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

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

简而言之,这是一个"非价值"。(原文如此(

Chez Scheme将其打印为#<void>:

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

ideone.com上的Guile 2.0.13将其打印为#<unspecified>

最新更新