Я тоже не знаю, что вы подразумеваете под "обычным eval", но я не понимаю, почему вы ожидаете, что с этим кодом будет распечатано что угодно, кроме 0.Фактически это вызовет бесконечный цикл, выводящий бесконечные нули.
Обратите внимание, что (printing-sub 0 0)
всегда будет просто отображать 0 и возвращать 0, потому что (- 0 0)
равно 0. Таким образом, в первой итерации вы получаете (f 0 (printing-sub 0 0))
, который возвращается обратно к (f 0 0)
, что вызывает бесконечный цикл.
Другими словами, if
всегда оценивается как #f
, потому что a
никогда не станет ничем иным, кроме 0.