【SICP练习】63 练习2.34



练习2.34

书中一开始有2个式子,一个是原式,一个根据Horner规则构造出的式子。而我们同样也可以将待求得式子写成这种方式,而且可以更进一步——那就是写成Lisp的前序表示:

(+ 1 (* x (+ 3 (* x (+ 0 (* x (+ 5 (* x(+ 0 x) ) ) ) ) ) ) ) )

由此可以观察得出lambda表达式里要做的是:

(+ this-coeff (* x (accumulate ......

通过不断的递归,最终就像上一题中图片所示的一样,accumulate最终会返回一个值,然后就开始计算不再递归了,空间需求也就开始缩小。

(define (horner-eval xcoefficient-sequence)

   (accumulate (lambda (this-coeff higher-terms)

                    (+ this-coeff (* xhigher-terms)))

                0

                coefficient-sequence))

下面我们来测试一下。

(load “d:\\lisp\\accumulate-2.scm”)

(load “d:\\lisp\\horner-eval.scm”)

(horner-eval 2 ‘(1 3 0 5 0 1))

;Value: 79

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值