Используйте values для пакета значений и call-with-values для передачи consumer с подходящей арностью.
Кратко
LISPEX
(call-with-values (lambda () (values 3 4)) (lambda (a b) (+ (* a a) (* b b))))Результат
OUTPUT
25Рабочий порядок
- Помещайте producer в специальный producer context, а не в операнд вызова, тест, инициализатор или RHS присваивания.
- Consumer получает каждое произведённое значение отдельным аргументом и обычно проверяется на арность.
- Используйте
(values)осознанно для нуля значений в допускающих отбрасывание путях.
Границы
- Не кодируйте семантические multiple values обычным списком, если вызывающий ожидает арность значений.