if … else … 的注意事项:
cond是if…else… 的扩展,能够级联实现if… else if… else…
(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
(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))
列出一个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 听得好晕回头再学这个把!!!



