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