EX 2.58

;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)
- Login to post comments
- 849 reads
Comments
Wed, 2007/03/28 - 09:46 — porco

好像有问题
...... full content is only available to community members.
- Login to post comments
Mon, 2008/11/10 - 06:38 — code17

Over generalized ?
...... full content is only available to community members.
- Login to post comments
|
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> |