16 lines
434 B
Racket
16 lines
434 B
Racket
(module pr10470 typed-scheme
|
|
|
|
(define-type-alias (Memo alpha) (U (Option alpha) (-> (Option alpha))))
|
|
|
|
(define-struct: table ([val : (Memo Number)]) #:mutable)
|
|
|
|
(: f (table -> (Option Number)))
|
|
(define (f tab)
|
|
(let ([proc-or-num (table-val tab)])
|
|
(cond
|
|
[(procedure? proc-or-num)
|
|
(let ([result (proc-or-num)])
|
|
(set-table-val! tab result)
|
|
result)]
|
|
[else proc-or-num]))))
|