if
Categories: Keywords procedures
, Conditional procedures
;;; (if guard consequent alternate) -> any?
;;; guard : expression?
;;; consequent : expression?
;;; alternate : expression?
;;; Evaluate `guard`. If it holds (is not `#f`), evaluate `consequent`
;;; and return its value. If `guard` evaluates to `#f`, evavluate the
;;; `alternate` and return its value.
We traditionally format if
expressions as follows.
(if guard
consequent
alternate)
That is,
if
.In tracing if
expressions, we first evaluate the guard. We then replace (if #f consequent alternate)
with alternate
and (if #t consequent alterante)
with `consequent.
For example,
(define square-larger
(lambda (x y)
(if (> x y)
(sqr x)
(sqr y))))
(square-larger (+ 1 2) (+ 4 -3))
--> (square-larger 3 (+ 4 -3))
--> (square-larger 3 1)
--> (if (> 3 1) (sqr 3) (sqr 1))
--> (if #t (sqr 3) (sqr 1))
--> (sqr 3)
--> 9
if
expressions usually have exactly one consequent and exactly one alternate. If you want multiple consequents or alternates, you should use a cond
expression. If you don’t want an alternate, you should use a when
expression.
Forthcoming
Forthcoming