2012年9月29日

带记忆的lazy evaluation 与 动态规划

摘要: lazy evaluation为了提高效率,一般提供一个结构来保存结果,当且仅当输入的值没有eval过才进行求值,否则是返回保存的结果。这个特性很适合用来实现动态规划。在动态规划中,最主要的是要找出问题的最优子结构,最常用的实现方法就是使用表格来记录所有子结构的结果。这种使用表格来记录子结构的结果的技术如果使用lazy evaluation来实现的话,非常简单。只要写出动态规划的递归式子,直接用递归式求解就可以得到最优解了。由于lazy evaluation中带有记忆,每个子结构只能被求值一次,从效率的角度来说是非常合算的。表格被求值器隐式的维护着。最近读SICP,发现带记忆的lazy eva 阅读全文

posted @ 2012-09-29 19:07 mathlover 阅读(222) 评论(0) 推荐(0) 编辑

2012年9月28日

let->combination 实现了let原语

摘要: 最近实现了普通的let表达式以及命名表达式。其中普通的表达式为(let ((var1 exp1) (var2 exp2) ... (varn expn)) body)变换成为((lambda (var1 var2 ... varn) body) exp1 exp2 ... expn)命名let的形式为(let name ((var1 exp1) (var2 exp2) ... (varn expn)) body)变换为(begin (define (name var1 var2 ... varn) body) (name exp1 exp2 ... expn))最终的代码实现为let-> 阅读全文

posted @ 2012-09-28 20:29 mathlover 阅读(213) 评论(0) 推荐(0) 编辑

2012年9月25日

unzipped list

摘要: 今天实现了一个unzipped操作,比如(list (list 1 2) (list 3 4) (list 5 6)) -> (list (list 1 3 5) (list 2 4 6))这个实现起来没有什么难度,但是scheme中的表操作折腾了好久才没错。(define (unzipped l) (if (null? l) (list '() '()) (list (cons (caar l) (car (unzipped (cdr l)))) (cons (cadar l) (cadr (unzipped (cdr l)))) ))) 阅读全文

posted @ 2012-09-25 17:55 mathlover 阅读(148) 评论(0) 推荐(0) 编辑

2012年9月15日

列表反转与深度反转

摘要: 列表反转的意思是将一个列表逆序过来,比如(list 1 2 3) -> (list 3 2 1)实现的时候最直接的想法是先将除了第一个元素意外的子表反转,然后将第一个元素接到后面去,但是在scheme中没有提供将一个元素append到某个list的结尾。因此使用头插入的办法,遍历要反转的表的第一个元素,用cons操作插入到结果的表的头部。(define (reverse-list ll) (define (reverse-list-iter r remain) (if (null? remain) r (reverse-list-iter (cons (car remain) r) (c 阅读全文

posted @ 2012-09-15 07:11 mathlover 阅读(594) 评论(0) 推荐(0) 编辑

2012年9月14日

连分数

摘要: 连分数是指形式如$f=\frac{N_1}{D_1+\frac{N_2}{D_2+\frac{N_3}{D3+\cdots}}}$给定的参数是2个procedure,用来返回$N_i$和$D_i$(define (cont-frac-iter n d k) (define (cont-frac-iter-in s n d k) (define new-s (/ (n k) (+ (d k) s))) (if (= k 1) new-s (cont-frac-iter-in new-s n d (- k 1)))) (cont-frac-iter-in 0 n d k))使用的思想是迭代 阅读全文

posted @ 2012-09-14 21:29 mathlover 阅读(185) 评论(0) 推荐(0) 编辑

用scheme求解立方根,迭代算法

摘要: 开始读点函数式语言的书,当前主要是SICP。主要的公式是(x)^{1/3}=\frac{x/y^2+2y},写成迭代的过程为(define (cube-inverse x) (define (good-enough? guess) (< (abs (- (/ (* guess guess guess) x) 1)) 0.0001)) (define (improve guess) (/ (+ (/ x (* guess guess)) (* guess 2)) 3)) (define (cube-inverse-iter guess) (if (good-enough? guess) g 阅读全文

posted @ 2012-09-14 06:11 mathlover 阅读(285) 评论(0) 推荐(0) 编辑

导航