《函数程序设计算法》读书笔记。
简单值
#t#t#f#f#\M#\M#\newline#\newline#\nul#\nul"sample""sample""\"Hi\"""\"Hi\"""\\A\\""\\A\\"'midnight-blue'midnight-blue(quote midnight-blue)'midnight-blue算术函数
(+)0(+ 1 2 3 4 5)15(- 1)-1(- 2 1)1(- 1 2 3)-4(*)1(* 2 3 4)243/13(/ 3 1)3(/ 3 2)3/2(= 3/1 (/ 3 1))#t(/ 5)1/5(expt 3 4)81(expt 3 0)1(expt 0 0)1Lambda 表达式
(lambda (x y) 
  (/ (+ x y) 2))<procedure>((lambda (x y) 
  (/ (+ x y) 2)) 3/5 11/3)32/15变元过程
(lambda nums
  (/ (apply + nums) (apply * nums)))<procedure>((lambda nums
  (/ (apply + nums) (apply * nums))) 3 5 8 2 6)1/60(lambda nums
  (apply + 23 14 6 nums))<procedure>((lambda (x y z . others)
  (* (+ x y z) (apply + others))) 1 2 3 3 4 5)72构造列表
(list 3 8 7)'(3 8 7)(list)'()返回多个值
values<procedure:values>(lambda nums
  (values (apply + nums) (apply * nums)))<procedure>((lambda nums
  (values (apply + nums) (apply * nums))) 1 2 3 4 5)15
120(define delist (lambda (ls)
  (apply values ls)))(delist (list 1 2 3 4 5))1
2
3
4
5谓词
(even? 2)#t(even? 3)#f(< 3 4)#t(< 4 3)#f(values <= = > >=)<procedure:<=>
<procedure:=>
<procedure:>>
<procedure:>=>(boolean? #f)#t(boolean? 0)#f(number? 0)#t(integer? 1)#t(integer? 1/2)#f(char? #\newline)#t(char? 'newline)#f(symbol? 'newline)#t(symbol? "newline")#f(string? "newline")#t(procedure? +)#t(procedure? (lambda (x) (+ x 1)))#t(equal? #t #t)#t(equal? + +)#t(equal? 3/1 3)#t(equal? (lambda (x) x) (lambda (x) x))#f(values zero? positive? negative? even? odd?)<procedure:zero?>
<procedure:positive?>
<procedure:negative?>
<procedure:even?>
<procedure:odd?>条件类型表达式
(if (= (+ 1 1) 2) 'eq 'neq)'eq(if (= (+ 1 1) 3) 'eq 'neq)'neq(and #t #t)#t(and #t #f)#f(and #f #f)#f(or #t #t)#t(or #t #f)#t(or #f #f)#f(and (= (+ 1 1) 2) 'eq)'eq(and (= (+ 1 1) 3) 'eq)#f(or (= (+ 1 1) 2) 'eq)#t(or (= (+ 1 1) 3) 'neq)'neq定义
(define meg 1048576)(define inches-in-a-mile (* 12 5280))meg1048576inches-in-a-mile63360(define (arithmetic-mean x y)
  (/ (+ x y) 2))(arithmetic-mean 3 4)7/2(define lesser (lambda (l r)
                 (if (< l r) l r)))(lesser 3 4)3(lesser 4 3)3(lesser 3 4)3(define (multi-arg . args) args)(multi-arg 1 2 3)'(1 2 3)(define (multi-arg2 x y . args) (values (+ x y) args))(multi-arg2 3 4 5 6)7
'(5 6)(define (factorial n)
  (if (= n 0)
      1
      (* n (factorial (- n 1)))))(factorial 5)120局部绑定
(let ((hours-in-a-day 24)
      (seconds-in-an-hour (* 60 60)))
  (* hours-in-a-day seconds-in-an-hour))86400(let ((double (lambda (x) (* x 2))))
  (* (double 7) (double 12)))336 
 
                     
            
        













 
                    

 
                 
                    