2.12 Conditionals: if, cond, and, and or
Conditionals in Guide: Racket introduces conditionals.
(if testexpr thenexpr elseexpr) 
Examples: 
> (if (positive? 5) (error "doesn't get here") 2) 
2 
> (if (positive? 5) 1 (error "doesn't get here")) 
1 
> (if 'wehavenobananas "yes" "no") 
"yes" 
(cond condclause ...)  

Chaining Tests: cond in Guide: Racket introduces cond.
A condclause that starts with else must be the last condclause.
If no condclauses are present, the result is #<void>.
If only a [else thenexpr ...+] is present, then the thenexprs are evaluated. The results from all but the last thenexpr are ignored. The results of the last thenexpr, which is in tail position with respect to the cond form, are the results for the whole cond form.
Otherwise, the first testexpr is evaluated. If it produces #f, then the result is the same as a cond form with the remaining condclauses, in tail position with respect to the original cond form. Otherwise, evaluation depends on the form of the condclause:
[testexpr thenexpr ...+] The thenexprs are evaluated in order, and the results from all but the last thenexpr are ignored. The results of the last thenexpr, which is in tail position with respect to the cond form, provides the result for the whole cond form.
[testexpr => procexpr] The procexpr is evaluated, and it must produce a procedure that accepts on argument, otherwise the exn:fail:contract exception is raised. The procedure is applied to the result of testexpr in tail position with respect to the cond expression.
[testexpr] The result of the testexpr is returned as the result of the cond form. The testexpr is not in tail position.
Examples:  
> (cond)  
 
5  
 
'here  
 
'(2 3)  
 
'(2 3) 
(and expr ...) 
Combining Tests: and and or in Guide: Racket introduces and.
If no exprs are provided, then result is #t.
If a single expr is provided, then it is in tail position, so the results of the and expression are the results of the expr.
Otherwise, the first expr is evaluated. If it produces #f, the result of the and expression is #f. Otherwise, the result is the same as an and expression with the remaining exprs in tail position with respect to the original and form.
Examples: 
> (and) 
#t 
> (and 1) 
1 
> (and (values 1 2)) 
1 
2 
> (and #f (error "doesn't get here")) 
#f 
> (and #t 5) 
5 
(or expr ...) 
Combining Tests: and and or in Guide: Racket introduces or.
If no exprs are provided, then result is #f.
If a single expr is provided, then it is in tail position, so the results of the and expression are the results of the expr.
Otherwise, the first expr is evaluated. If it produces a value other than #f, that result is the result of the or expression. Otherwise, the result is the same as an or expression with the remaining exprs in tail position with respect to the original or form.
Examples: 
> (or) 
#f 
> (or 1) 
1 
> (or (values 1 2)) 
1 
2 
> (or 5 (error "doesn't get here")) 
5 
> (or #f 5) 
5 