Из стандарта R5RS:
Values might be defined as follows:
(define (values . things)
(call-with-current-continuation
(lambda (cont) (apply cont things))))
Моей первой интерпретацией этого было то, что такое выражение, как (+ (values 1 2))
, эквивалентно (apply + '(1 2))
и даст результат 3
. Но, согласно моим тестам, эта интерпретация неверна. Вот моя интерпретация приведенного выше кода: values
— это функция, принимающая любое количество аргументов, объединенных в список с именем things
. Затем вызывается текущее продолжение (место, где используется values
) со списком things
"развязанным".
Что мне не хватает? Пример выше (+ (values 1 2))
дает ошибку или 1 в зависимости от используемого мной интерпретатора.
+
не является продолжением. - person molbdnilo   schedule 04.04.2018