首页 > 解决方案 > 当条件为假时,`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但它是什么?

标签: schemeconditionalevaluationguile

解决方案


更新:文档说:“当......测试评估为#f时,未指定表达式的值。” 所以它可能是任何东西,不应该依赖任何东西。


它返回一个 not null?、 notboolean?和 not的值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>.


推荐阅读