基本语法
宏定义 (define pi 3.14) (define hi "hello") 定义一个过程 (define (add a b) (+ a b)) (add 10 20) 一个序对 (cons 1 2) (cons 1.1 "aa") 定义一个序对 (define x (cons 1 2)) (define y (cons 3 4)) (define z (cons x y)) car是Contents of Address part of Register寄存器的地址部分的内容 cdr是Contents of Decrement part of Register寄存器的减量部分的内容 (car (car z)) 结果是1 (car (cdr z)) 结果是3 (define c (cons 11 22)) (define d (cons 33 44)) (define x (cons a b)) (define y (cons c d)) (define z (cons x y)) (((1 . 2) 3 . 4) (11 . 22) 33 . 44) #z的值 # (car z) ((1 . 2) 3 . 4) #(caar z) (1 . 2) # (caaar z) 1 # (cdadr z) 相当于 cdr,car,cdr三个操作,先从cdr开始然后是car最后是cdr # cdr后就是 (11 . 22) 33 . 44), car后就是(11,22),最后cdr就是22 22 # (cddar z) 按照上面的推论结果就是4 #if表达式 (if predicate then_value else_value) and or not # 条件分支 (define test-age (lambda (age) (cond ((< age 16) "未成年") ((and (> age 16) (< age 28)) "少年先锋队") ((and (> age 28) (< age 40)) "成年人") ((and (> age 40) (< age 55)) "中年人") ((and (> age 55) (< age 70)) "老年人") (else "很老的年纪")) )) (test-age 19)
let语法
(let ((a 1) (b 2)) (+ a b)) #定义一个lambda再内嵌lambda的函数,其中包含了let定义 (define gg (lambda (x) (let ((a 10) (b 20)) (lambda (y) (let ((c 30) (d 40)) (+ (+ a c) (+ x y)) ))))) (gg 10) ((gg 1) 2) #结果 3 #<procedure> 43 #实际上,let表达式只是lambda表达式的一个语法糖 (let ((p1 v1) (p2 v2) ...) exp1 exp2 ...) ;⇒ ((