Fix transform-type and make next-type an internal procedure
This commit is contained in:
parent
75d6bb8e05
commit
86b044fd13
18
2_78.rkt
18
2_78.rkt
|
@ -79,21 +79,21 @@
|
|||
#f
|
||||
(tower-iter tower)))
|
||||
|
||||
|
||||
(define tower '(integer rational scheme-number complex))
|
||||
|
||||
(define (next-type type tower)
|
||||
(cond ((or (null? tower)
|
||||
(null? (cdr tower))) '())
|
||||
((eq? type (car tower)) (cadr tower))
|
||||
(else (next-type type (cdr tower)))))
|
||||
|
||||
(define (transform-type x tower)
|
||||
(define (next-type type tower)
|
||||
(cond ((or (null? tower)
|
||||
(null? (cdr tower))) '())
|
||||
((eq? type (car tower)) (cadr tower))
|
||||
(else (next-type type (cdr tower)))))
|
||||
(and (type-tagged? x)
|
||||
(let* ((type (type-tag x))
|
||||
(proj-type (next-type type tower)))
|
||||
(if proj-type
|
||||
((get-coercion type proj-type) (contents x))
|
||||
'()))))
|
||||
(if (null? proj-type)
|
||||
'()
|
||||
((get-coercion type proj-type) (contents x))))))
|
||||
|
||||
(define (raise x)
|
||||
(transform-type x tower))
|
||||
|
|
Loading…
Reference in New Issue