scheme - 当条件为假时,`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
但它是什么?
解决方案
更新:文档说:“当......测试评估为#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>
.
推荐阅读
- java - 使用 @ResponseBody 注释做出响应时的额外字符
- android - 从android中的城市和国家获取时区ID
- python - Scrapy 获取跨越多行和嵌套元素内的文本
- python - Emacs:自动填充模式 - 如何更改行尾字符?
- html - 谷歌地图有额外的宽度
- apostrophe-cms - Apostrophe CMS:在嵌套连接中获取片段数据(joinByArray – joinByOne)
- javascript - 使用 kepresses 和 if 语句来启用和禁用元素
- assembly - 如何在装配臂中打印多个字符串?
- javascript - 使用 Ionic 4 Angular Fire Auth 保护的无限 console.logging
- azure - 创建函数应用时出现“此区域不允许此订阅的缩放操作”错误