Change to use cond

This commit is contained in:
Isaac Shoebottom 2025-03-19 15:24:15 -03:00
parent 64281e9a42
commit 31b6f1a494

View File

@ -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)))