From 9de52ba14575719ae18b49f9c67651cec300180b Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 21 Aug 2020 17:48:12 +0300 Subject: [PATCH] Add 1.17 --- sicp-ex-1.17.rkt | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 sicp-ex-1.17.rkt diff --git a/sicp-ex-1.17.rkt b/sicp-ex-1.17.rkt new file mode 100644 index 0000000..60ea611 --- /dev/null +++ b/sicp-ex-1.17.rkt @@ -0,0 +1,43 @@ +(define (multiply a b) + (define (iter a b product) + (if (= b 0) + product + (iter a (- b 1) (+ product a)))) + + (iter a b 0)) +; multiply + +(define (sqr n) + (multiply n n)) + +(define (divide a b) + (define (iter a b product) + (cond ((= a 0) product) + ((< a 0) (- product 1)) + (else (iter (- a b) b (+ product 1))))) + + (iter a b 0)) +; divide + +(define (halve a) + (divide a 2)) + +(define (fast-ext number power) + (define (iter number power product) + (cond ((= power 0) product) + ((even? power) (iter (sqr number) + (halve power) + product)) + (else (iter number + (- power 1) + (multiply number product))))) + + (iter number power 1)) +; fast-ext + +(fast-ext 5 3) +(fast-ext 2 2) +(fast-ext 1 2) +(fast-ext 9 4) +(fast-ext 2 0) +(fast-ext 7 1) \ No newline at end of file