EX 2.58

netawater's picture
;sum与product为2.58 a)答案
;reduce为2.58 b)主要答案

;;----------用来抽象前缀或者中缀,没成功,left/right-reduce中用的还是cddr
(define (make operator first-number second-number)
  (list first-number operator second-number))
(define (first-number exp)
  (car exp))
(define (second-number exp)
  (caddr exp))
(define (operator exp)
  (cadr exp))   ;;上面的选择函数
;-----------next-op
(define (next-op exp)
  (if (null? (cdddr exp))
      '()
      (cadddr exp)))    ;;用于确定left or right-reduce的

;;-------------本级别化简完毕与否
(define (reduced-this-level? exp)
  (cond ((null? exp) #t)  ;;null的情况待处理
        ((not (pair? exp)) #t)
        ((= (length exp) 3) #t)
        (else #f)))

;-----------把归约抽象为左归约和右规约

(define (right-reduce exp)      ;右归约  如:a+b+c-->a+(b+c)

...... full content is only available to community members.

Comments

porco's picture

好像有问题

...... full content is only available to community members.

code17's picture

Over generalized ?

...... full content is only available to community members.