Change to use cond
This commit is contained in:
parent
64281e9a42
commit
31b6f1a494
12
Labs/07.rkt
12
Labs/07.rkt
@ -4,8 +4,6 @@
|
|||||||
(define-syntax-rule (test/exn expr msg)
|
(define-syntax-rule (test/exn expr msg)
|
||||||
(check-exn exn:fail? (lambda () expr) msg))
|
(check-exn exn:fail? (lambda () expr) msg))
|
||||||
|
|
||||||
(define-type Node (Symbol -> (U (U Number Node) Zero)))
|
|
||||||
|
|
||||||
(define (msg0 [obj : Node] [selector : Symbol]) (obj selector))
|
(define (msg0 [obj : Node] [selector : Symbol]) (obj selector))
|
||||||
|
|
||||||
(define (node [v : Number] [l : Node] [r : Node]) : Node
|
(define (node [v : Number] [l : Node] [r : Node]) : Node
|
||||||
@ -17,12 +15,14 @@
|
|||||||
[(sum) (+ v (+ (msg-num l 'sum) (msg-num r 'sum)))]
|
[(sum) (+ v (+ (msg-num l 'sum) (msg-num r 'sum)))]
|
||||||
[else (error 'node (symbol->string m))])))
|
[else (error 'node (symbol->string m))])))
|
||||||
|
|
||||||
(define (mt) : Node
|
(define (mt)
|
||||||
(lambda ([m : Symbol])
|
(lambda ([m : Symbol])
|
||||||
(case m
|
(case m
|
||||||
[(sum) 0]
|
[(sum) 0]
|
||||||
[else (error 'mt (symbol->string m))])))
|
[else (error 'mt (symbol->string m))])))
|
||||||
|
|
||||||
|
(define-type Node (Symbol -> (U (U Number Node) Zero)))
|
||||||
|
|
||||||
(define (msg-num [obj : Node] [selector : Symbol]) : Number
|
(define (msg-num [obj : Node] [selector : Symbol]) : Number
|
||||||
(define result (msg0 obj selector))
|
(define result (msg0 obj selector))
|
||||||
(cond
|
(cond
|
||||||
@ -31,9 +31,9 @@
|
|||||||
|
|
||||||
(define (msg-node [obj : Node] [selector : Symbol]) : Node
|
(define (msg-node [obj : Node] [selector : Symbol]) : Node
|
||||||
(define result (msg0 obj selector))
|
(define result (msg0 obj selector))
|
||||||
(if (not (number? result))
|
(cond
|
||||||
result
|
[(not (number? result)) result]
|
||||||
(error 'msg-node "Expected a node message")))
|
[else (error 'msg-node "Expected a node message")]))
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
(define tree1 (node 1 (mt) (mt)))
|
(define tree1 (node 1 (mt) (mt)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user