summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-01-10 15:37:16 +0100
committerMike Vink <mike1994vink@gmail.com>2023-01-10 15:37:16 +0100
commit6e7d017d5ee448b1037e4153fce7027826abd787 (patch)
treeecbb02fb2e659835099711c64f6d63675d094ab9
parentd062ec686a486822625e34cfa262e6d4e5b76a8d (diff)
116
-rw-r--r--chapter115.rkt14
-rw-r--r--chapter116.rkt16
2 files changed, 30 insertions, 0 deletions
diff --git a/chapter115.rkt b/chapter115.rkt
new file mode 100644
index 0000000..0a026c6
--- /dev/null
+++ b/chapter115.rkt
@@ -0,0 +1,14 @@
+#lang sicp
+(define counter (box 0))
+
+(define (cube x) (* x x x))
+(define (p x)
+ (set-box! counter (+ (unbox counter) 1))
+ (- (* 3 x) (* 4 (cube x))))
+(define (sine angle)
+ (if (not (> (abs angle) 0.1))
+ angle
+ (p (sine (/ angle 3)))))
+(sine 1250.0)
+(println "\n")
+(println (unbox counter))
diff --git a/chapter116.rkt b/chapter116.rkt
new file mode 100644
index 0000000..61b8e6f
--- /dev/null
+++ b/chapter116.rkt
@@ -0,0 +1,16 @@
+(define (square x) (* x x))
+
+(define (fast-expt b n)
+ (cond ((= n 0) 1)
+ ((even? n) (square (fast-expt b (/ n 2))))
+ (else (* b (fast-expt b (- n 1))))))
+
+(define (fie a b n)
+ (cond ((= n 0) a)
+ ((even? n) (fie a (square b) (/ n 2)))
+ (else (fie (* a b) b (- n 1)))))
+
+(define (fast-expt b n)
+ (fie 1 b n))
+
+(fast-expt 3 4)