语法:
() 空表
(obj1 obj2 ...)
(procedure arg ...)
(car (list)) 取第一个元素
(cdr (list)) 取列表剩余元素
(cons a b) 将2个参数构建成列表
(list a b ...) 与cons相同,构建列表,但可允许任意参数
(quote (expr)) 将表达式当作列表
'(expr) 引用的语法糖
((car (list + - * /)) 2 3)
(let ((var expr) ...) body1 body2 ...) 绑定值到变量中
(let ([var expr] ...) body1 body2 ...) 同上,但可以通过方括号写法更明显
let可以绑定任何值给符号,绑定的变量只在let的body中可见(类似局部变量)
(lambda (var ...) body1 body2 ...) 定义新的procedure
示例:
((lambda (x) (* x x))(* 3 4)) => (p (* 3 4)) => (p 12) => (* 12 12) => 144
(define var0
(lambda (var1 ... varn)
e1 e2 ...))
可简化为:
(define (var0 var1 ... varn)
e1 e2 ...
)
(define var0
(lambda varr
e1 e2 ...))
可简化为:
(define (var0 . varr)
e1 e2 ...)