Передаем массив по ссылке
Не, это я решил по-питоновски написать, это не передача по ссылке, а заполнение аргументов функции элементами переданного списка. Удобнее было бы определить
amb берущим список, но и так и так получилась бы коллизия с классическим определением.
что такое будущее? следующие строчки кода? там нет вызова amb
Потому я предлагаю понимать его (в принципе, это единственное понимание и есть) как разветвление вселенной на

равновозможных; реализовать его в абсолютной полноте нельзя ни на одной машине, по тем же причинам, по каким нельзя call/cc (и по каким использовать delimited continuations правильнее, чем неограниченные и call/cc). Тогда вселенная перед выполнением if разветвлена на 16 возможных, 14 из которых после выполнения его тела схлопываются (получая 0 возможных продолжений) и остаются лишь те, где

или

.