1 嵌套列表结构的遍历
if … else … 的注意事项:
1.1 cond
cond是if…else… 的扩展,能够级联实现if… else if… else…
1.2 递归实现flatten函数
(define (flatten sequence)
(cond ((null? sequence) '())
((list? (car sequence))
(append (flatten (car sequence))
(flatten (cdr sequence))))
(else (cons (car sequence)
(flatten (cdr sequence))))))
2 判断list是否有序
2.1 car和cdr的最多四级级联
2.2 判断列表是否升序
(define (sorted? num-list)
(or (< (length num-list) 2)
(and (<= (car num-list)
(cadr num-list))
(sorted? (cdr num-list)))))
加入"接口"
(define (sorted? seq cmp)
(or (< (length seq) 2)
(and (cmp (car seq)
(cadr seq))
(sorted? (cdr seq) cmp))))
2.3 关于list的比较运算符
3 scheme中函数指针等价物?
3.1 map
3.2 eval
3.3 apply
3.3.1 apply实现对list求平均值
3.3.2 apply实现flatten
(define (flatten seq)
(if (not (list? seq)) (list seq)
(apply append (map flatten seq))))
scheme几乎只有运行时间,没有编译时间,是弱输入型语言,运行的时候才会检查输入是否正确!
4 lambda
4.1 大小写转换函数translate
字符 | ascⅡ码值 |
---|---|
a-z | 97-122 |
A-Z | 65-90 |
‘A’ + 32 = ‘a’
(define (translate points delta)
(map (lambda (x)
(+ x delta))
points))
4.2 power set
列出一个list的所有子集
(define (ps set)
(if (null? set) '(())
(append (ps (cdr set))
(map (lambda (subset)
(cons (car set) subset))
(ps (cdr set))))))
5 let 类似return value
6 lambda和let的关系
相比于C、C++等语言,scheme可以让你更关注抽象概念和算法!
在C、C++里面,你还需要关注变量的声明、内存分配等问题!
paradigms 22、23、24 听得好晕
回头再学这个把!!!