Песочница

Создание и потребление нескольких значений

Используйте 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 обычным списком, если вызывающий ожидает арность значений.