Как `if` не оценивает все свои аргументы?

Я пытаюсь выучить и понять язык программирования Lisp на глубоком уровне. Функция+ оценивает свои аргументы в аппликативном порядке:

(+ 1 (+ 1 2))

(+ 1 2) будет оцениваться, а затем(+ 1 3) будет оцениваться, ноif Функция работает по-разному:

(if (> 1 2) (not-defined 1 2) 1)

Как форма(not-defined 1 2) ISN»т оценивается, программа нет перерыв.

Как один и тот же синтаксис может привести к разной оценке аргументов? Какif функция определена так, что ее аргументы нет оценили?

Ответы на вопрос(6)

Ваш ответ на вопрос