Как `if` не оценивает все свои аргументы?
Я пытаюсь выучить и понять язык программирования Lisp на глубоком уровне. Функция+
оценивает свои аргументы в аппликативном порядке:
(+ 1 (+ 1 2))
(+ 1 2)
будет оцениваться, а затем(+ 1 3)
будет оцениваться, ноif
Функция работает по-разному:
(if (> 1 2) (not-defined 1 2) 1)
Как форма(not-defined 1 2)
ISN»т оценивается, программа нет перерыв.
Как один и тот же синтаксис может привести к разной оценке аргументов? Какif
функция определена так, что ее аргументы нет оценили?