Chapter 3: Interpreting Computer Programs
3.2 Functional Programming
3.2.1 Expressions
scheme 语言的一些语法:
(quotient 10 2)
5
(+ (* 3 5) (- 10 6))
19
(+ (* 3
(+ (* 2 4)
(+ 3 5)))
(+ (- 10 7)
6))
57
# if 表达式
(if <predicate> <consequent> <alternative>)
(>= 2 1)
true
# cond 表达式
(cond
(<p1> <e1>)
(<p2> <e2>)
...
(<pn> <en>)
(else <else-expression>))
#t (或 true )
#f (或 false )
# 与 或 非,短路性质
(and <e1> ... <en>)
(or <e1> ... <en>)
(not <e>)
3.2.2 Definitions
绑定 symbol:
(define pi 3.14)
(* pi 2)
6.28
函数定义:
(define (<name> <formal parameters>) <body>)
(define (square x) (* x x))
(square 21)
441
(square (+ 2 5))
49
(square (square 3))
81
(define (average x y)
(/ (+ x y) 2))
(average 1 3)
2
(define (abs x)
(if (< x 0)
(- x)
x))
(abs -3)
3
匿名函数:
(lambda (<formal-parameters>) <body>)
(define (plus4 x) (+ x 4))
# 等价于
(define plus4 (lambda (x) (+ x 4)))
3.2.3 Compound values
pairs 通过 cons 创建, car 和 cdr 访问:
(define x (cons 1 2))
x
(1 . 2)
(car x)
1
(cdr x)
2
Recursive lists. 特殊值 nil 或 () 表示空列表。
# 底层实现
(cons 1
(cons 2
(cons 3
(cons 4 nil))))
(1 2 3 4)
# 定义list
(list 1 2 3 4)
(1 2 3 4)
(define one-through-four (list 1 2 3 4))
(car one-through-four)
1
(cdr one-through-four)
(2 3 4)
(car (cdr one-through-four))
2
(cons 10 one-through-four)
(10 1 2 3 4)
(cons 5 one-through-four)
(5 1 2 3 4)
3.2.4 Symbolic Data
在符号前面加上单引号,使用符号本身。
(define a 1)
(define b 2)
(list a b)
(1 2)
(list 'a 'b)
(a b) (a b)
(list 'a b)
(a 2) (a 2)