#lang racket
; exercise 1.1
10
(+ 5 3 4)
(- 9 1)
(/ 6 2)
(+ (* 2 4) (- 4 6))
(define a 3)
(define b (+ a 1))
(+ a b (* a b))
(= a b)
(if (and (> b a) (< b (* a b)))
b
a)
(cond ((= a 4) 6)
((= b 4) (+ 6 7 a))
(else 25))
(+ 2 (if (> b a) b a))
(* (cond ((> a b) a)
((< a b) b)
(else -1))
(+ a 1))
; exercise 1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))
; exercise 1.3
(display "\nexercise 1.3\n")
(define (sum-of-bigger a b c)
(cond ((and (<= a b) (<= a c)) (+ b c))
((and (<= b a) (<= b c)) (+ a c))
(else (+ a b))))
(sum-of-bigger 1 1 2)
; exercise 1.4
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b)) ;; 运算符可以作为值返回,所以这里的if语句求值结果为+/-,然后再计算
(a-plus-abs-b 32 -12)
(a-plus-abs-b 32 12)
; exercise 1.5
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
;; 如果是正则序求值,先代入再计算,则结果为0;如果是应用序求值,先计算参数值后再代入,所以上述代码(p)不停得调用自身,无法终止
;; DrRacket采用的是应用序,死循环