Что возвращает `когда`, когда условие ложно? - PullRequest
0 голосов
/ 04 ноября 2018
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, но что это?

1 Ответ

0 голосов
/ 04 ноября 2018

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>.

...