标签:sicp scheme lambda lisp loop
这种题目太像是数学题目了,不过拿到编程上又有一些的难度。我们先根据题目中的条件,写出类似于第25页最下面的变换规则。我们先列出如下内容:
a-- f(n-1) f(2) f(3) f(4) f(5)
b-- f(n-2) f(1) f(2) f(3) f(4)
c—f(n-3) f(0) f(1) f(2) f(3)
于是继而得出下式:
a—a+2b+3c
b—a
c—b
于是核心部分已经出来了:
(f-iter (a+2b+3c) a b (- counter 1))
最终写成代码即可:
(define (f n)
(f-iter1 0 0 n))
(define (f-iter a b c count)
(if(= counter 0)
b
(f-iter (+ a (* 2 b) (* 3 c)) a b (- count1))))
类比其实是一个很好的学习方法,在博主的【Scheme归纳】3中,通过类比学习了几个很重要的关键字。
标签:sicp scheme lambda lisp loop
原文地址:http://blog.csdn.net/nomasp/article/details/43529079