Skip to content

Latest commit

 

History

History
81 lines (50 loc) · 1.59 KB

32.rst

File metadata and controls

81 lines (50 loc) · 1.59 KB

练习 1.32

sumproduct ,我们可以进一步抽象出『累积』的概念,并将它写成相应的 accumulate 函数,它和之前的 sumproduct 函数都非常相似:

.. literalinclude:: code/32-rec-accumulate.scm


重定义 sum 和 product

接着,使用 accumulate 函数重定义 sum

.. literalinclude:: code/32-sum.scm

还有 product 函数:

.. literalinclude:: code/32-product.scm

测试新的 sum

1 ]=> (load "32-sum.scm")

;Loading "32-sum.scm"...
;  Loading "32-rec-accumulate.scm"... done
;... done
;Value: sum

1 ]=> (sum (lambda (x) x)
           1
           (lambda (i) (+ i 1))
           10)

;Value: 55

测试新的 product

1 ]=> (load "32-product.scm")

;Loading "32-product.scm"...
;  Loading "32-rec-accumulate.scm"... done
;... done
;Value: product

1 ]=> (product (lambda (x) x)
               1
               (lambda (i) (+ i 1))
               10)

;Value: 3628800

迭代版 accumulate

迭代版的 accumulate 和之前迭代版的 sumproduct 都非常相似:

.. literalinclude:: code/32-iter-accumulate.scm

测试:

1 ]=> (load "32-iter-accumulate.scm")

;Loading "32-iter-accumulate.scm"... done
;Value: accumulate

1 ]=> (accumulate +
                  0
                  (lambda (x) x)
                  1
                  (lambda (i) (+ i 1))
                  10)

;Value: 55