; frac objects are like (number 'numerator 'denominator) ; the classics; just yanked from wikipedia w/o errors or citation (define cgs-units-constants (list (list (* 2.998 (expt 10 10)) 'c) ; speed of light (list (* 6.626 (expt 10 -27)) 'h) ; plank (list (* 4.803 (expt 10 -10)) 'e) ; electron charge (esu) ; (list 3.14159268 'pi) ; pi! )) (define (make-ordered-fracs primatives) (sort (append primatives (map (lambda (x) (list (/ 1 (car x)) (quasiquote '(/ 1 ,(cadr x))))) primatives)) (lambda (a b) (< (car a) (car b))))) (make-ordered-fracs cgs-units-constants) (define (good-approximation x primatives eta) (define (closest-term y ordered) (cond ((null? ordered) (error "need at least one thing to check!")) ((null? (cdr ordered)) (car ordered)) ((< (abs (- y (caar ordered))) (abs (- y (caar (cdr ordered))))) (car ordered)) (else (closest-term y (cdr ordered))))) (define (iterate-term y ordered eta) (if (< (abs y) (abs eta)) (begin (display y) (newline) (display (- y eta)) '()) (begin (display "x: ") (display y) (newline) (let ((best (closest-term y ordered))) (cons (cadr best) (iterate-term (/ y (car best)) ordered eta)))))) (iterate-term x (make-ordered-fracs primatives) eta)) (good-approximation 876259081724391234.0 cgs-units-constants 200.)