forked from RaphaLevy/main
-
Notifications
You must be signed in to change notification settings - Fork 0
/
coerce-procs.rkt
35 lines (26 loc) · 1.11 KB
/
coerce-procs.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#lang racket
(require "table.rkt" "tag-system.rkt" "number.rkt" "complex.rkt"
"rational.rkt")
(require rackunit)
(define (make-from-real-imag x y)
((get 'make-from-real-imag 'complex) x y))
(define (make-from-mag-ang r a)
((get 'make-from-mag-ang 'complex) r a))
(define (make-rational x y)
((get 'make 'rational) x y))
(define (numer r) (apply-generic 'numer r))
(define (denom r) (apply-generic 'denom r))
(define (scheme-number->complex x)
(make-from-real-imag (contents x) 0))
(define (rational->scheme-number r)
(/ (numer r) (denom r)))
(define (rational->complex r)
(scheme-number->complex
(rational->scheme-number r)))
(put-coercion 'scheme-number 'complex scheme-number->complex)
(put-coercion 'rational 'scheme-number rational->scheme-number)
(put-coercion 'rational 'complex rational->complex)
(check-equal? (rational->scheme-number (make-rational 1 2)) 1/2)
(check-equal? (scheme-number->complex 4) (make-from-real-imag 4 0))
(check-equal? (rational->complex (make-rational 1 2)) (make-from-real-imag 1/2 0))
(provide make-from-real-imag make-from-mag-ang make-rational numer denom)