编程语言:Racket
-
使用括号来表示一个运算,括号内的运算一般不影响括号外
-
括号内是运算符前置的,也就是说第一个操作符一定被视为运算符,除非括号前加 ’
-
变量binding
- (define x expression)
- Once an expression produces a value, it is irrelevant how the value was produced
-
创建函数
- Environment for closure determined when function is defined, but body is evaluated when function is called
(define cube
(lambda (x)
(* x x x)))
//语法糖
(define (cube3 x)
(* x x x))
- if语句
- (if e1 e2 e3)
- e1为判断语句,为假(#f)则执行e3,否则执行e3
- 惰性计算
- cons
- immutable
(cons 2 (cons 3 null))
或者(list 2 3)
- list实际上是以null结尾的pair
- car相当于SML中的head
- cdr相当于SML中的tail
- null? 判断是否为空
- null 空列表(不能用() 表示)
- cond语句
- 应用于多重判断
- []中的第一个是判断,若为真执行后一语句
- 最后一个判断必须为#t
- 相当于switch语法
(cond [(null? xs) 0]
[(number? (car xs)) (+ (car xs) (sum (cdr xs)))]
[#t (+ (sum (car xs)) (sum (cdr xs)))]))
- local binding
- let\let*\letrec 三种形式