;; $Id: grav-force-example.scm,v 1.2 2006/01/05 22:24:09 leavens Exp $ ;;; AUTHOR: Gary T. Leavens (module grav-force-example (lib "typedscm.ss" "typedscm") (provide G grav-force grav-force-c mass-of-earth radius-of-earth earths-force force-at-surface) (define G ;; UNITS: N * m^2 / kg^2 6.670e-11) (define square ;; UNITS: (-> (m) m^2) (lambda (r) (* r r))) (define grav-force ;; UNITS: (-> (kg m kg) N) (lambda (m1 r m2) (if (zero? r) 0.0 (/ (* G (* m1 m2)) (square r))))) (define grav-force-c ;; UNITS: (-> (kg) (-> (m) (-> (kg) N))) (lambda (m1) ; kg (lambda (r) ; m (lambda (m2) ; kg (if (zero? r) 0.0 (/ (* G (* m1 m2)) (square r))))))) ;; USING IT (define mass-of-earth ;; UNITS: kg 5.96e24) (define radius-of-earth ;; UNITS: m 6.37e6) (define earths-force ;; UNITS: (-> (m) (-> (kg) N)) (lambda (r) ((grav-force-c mass-of-earth) r))) (define force-at-surface ;; UNITS: (-> (kg) N) (lambda (m2) ((earths-force radius-of-earth) m2))) ) ;; end module