1#lang typed/racket/base
2
3(provide (all-defined-out))
4
5;; Returns the interpolated distance of z from za toward zb
6;; Examples: if z = za, this returns 0.0
7;;           if z = zb, this returns 1.0
8;;           if z = (za + zb) / 2, this returns 0.5
9;; Intuitively, regard a use (solve-t z za zb) as "the point between za and zb".
10(define-syntax-rule (solve-t z za zb)
11  (/ (- z za) (- zb za)))
12
13(define-syntax-rule (unsolve-t za zb t)
14  (cond [(eq? t 0)  za]
15        [(eq? t 1)  zb]
16        [else  (+ (* t zb) (* (- 1 t) za))]))
17
18