sicp2.38


;right为,先算右边元素的结果,并将结果放在op的右边
;left为,先算左边元素的结果,并将结果放在op的左边
(define (fold-left op initial sequence)
  (define (iter result rest)
    (if (null? rest)
        result
        (iter (op result (car rest))
              (cdr rest))))
  (iter initial sequence))

(fold-left / 1 (list 1 2 3))
(define (fold-right op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (fold-right op initial (cdr sequence)))))

(display "====")
(newline)
(fold-right / 1 (list 1 2 3))
(fold-left / 1 (list 1 2 3))
(fold-right list nil (list 1 2 3))
(fold-left list nil (list 1 2 3))
(fold-right cons nil (list 1 2 3))
(fold-left cons nil (list 1 2 3))
(fold-left (lambda (x y) (cons y x)) nil (list 1 2 3))

(list 1 nil)
(list 2 (list 1 nil))

;(op 从右边数第一个元素 结果) 即:(/ 3 1) = 3
;(op 从右边数第二个元素 结果) 即:(/ 2 3) = 2/3
;(op 从右边数第三个元素 结果) 即:(/ 1 2/3) = 3/2 = 1右二分之一

;(op 结果 从左边数第一个元素) 即:(/ 1 1) = 1
;递归 1/2 1/6

(fold-right (lambda (x y)
              (append y (list x)))
            nil (list 1 2 3))
(display "====")

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值