summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsiddharth <rsiddharth@ninthfloor.org>2016-04-30 20:31:19 +0000
committerrsiddharth <rsiddharth@ninthfloor.org>2016-04-30 20:31:19 +0000
commit7324e84999431c3b6aaf151241696034b7301468 (patch)
tree3b02c5e3a7136fd5b884bf861787c80e521e717c
parent0e3dccf67b94f3edd02efb153ce864d81de82ead (diff)
Add one/eight.scm
Exercise 1.8.
-rw-r--r--one/eight.scm38
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))
+