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>
И Guile 2.0.13 на ideone.com печатает его как #<unspecified>
.