diff options
Diffstat (limited to 'final_project/work/numerolgist.scm')
-rw-r--r-- | final_project/work/numerolgist.scm | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/final_project/work/numerolgist.scm b/final_project/work/numerolgist.scm new file mode 100644 index 0000000..6553232 --- /dev/null +++ b/final_project/work/numerolgist.scm @@ -0,0 +1,46 @@ + + +; 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.) + |