diff options
author | rsiddharth <rsiddharth@ninthfloor.org> | 2016-04-30 20:31:19 +0000 |
---|---|---|
committer | rsiddharth <rsiddharth@ninthfloor.org> | 2016-04-30 20:31:19 +0000 |
commit | 7324e84999431c3b6aaf151241696034b7301468 (patch) | |
tree | 3b02c5e3a7136fd5b884bf861787c80e521e717c /one | |
parent | 0e3dccf67b94f3edd02efb153ce864d81de82ead (diff) |
Add one/eight.scm
Exercise 1.8.
Diffstat (limited to 'one')
-rw-r--r-- | one/eight.scm | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/one/eight.scm b/one/eight.scm new file mode 100644 index 0000000..fb944e7 --- /dev/null +++ b/one/eight.scm @@ -0,0 +1,38 @@ +;;; Under Creative Commons Attribution-ShareAlike 4.0 +;;; International. See +;;; <https://creativecommons.org/licenses/by-sa/4.0/>. + +(define-module (one eight) + #:export (cube double + div-three improve + good-enough? cbrt-iter + cbrt-sicp)) + +(use-modules (one six)) + +(define (cube x) + (* (square x) x)) + +(define (double x) + (* 2 x)) + +(define (div-three x) + (/ x 3.0)) + +(define (improve y x) + (div-three (+ (/ x (square y)) + (double y)))) + +(define (good-enough? y x) + (< (abs (- (cube y) x)) + 0.001)) + +(define (cbrt-iter y x) + (if (good-enough? y x) + y + (cbrt-iter (improve y x) + x))) + +(define (cbrt-sicp x) + (cbrt-iter 1.0 x)) + |