W jaki sposób `if` nie ocenia wszystkich argumentów?

Próbuję nauczyć się i zrozumieć język programowania Lisp do głębokiego poziomu. Funkcja+ ocenia swoje argumenty w odpowiedniej kolejności:

(+ 1 (+ 1 2))

(+ 1 2) zostanie poddany ocenie, a następnie(+ 1 3) zostanie oceniony, aleif funkcja działa inaczej:

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

Jako forma(not-defined 1 2) nie jest oceniany, program się nie psuje.

Jak ta sama składnia może prowadzić do innej oceny argumentów? Jak jestif funkcja zdefiniowana tak, aby jej argumenty nie były oceniane?

questionAnswers(6)

yourAnswerToTheQuestion