From 75bce812b16d376350d8631f80db3da3a0d0d928 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 21 Aug 2020 20:22:56 +0300 Subject: [PATCH] Add 1.18 --- sicp-ex-1.18.rkt | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 sicp-ex-1.18.rkt diff --git a/sicp-ex-1.18.rkt b/sicp-ex-1.18.rkt new file mode 100644 index 0000000..80cac03 --- /dev/null +++ b/sicp-ex-1.18.rkt @@ -0,0 +1,28 @@ +(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 (double a) + (+ a a)) + +(define (multiply a b) + (define (iter a b product) + (cond ((= a 1) (+ product b)) + ((even? a) (iter (halve a) (double b) product)) + (else (iter (halve a) (double b) (+ product b))))) + + (iter a b 0)) +; multiply + + +(multiply 132 555) +(multiply 32 2) +(multiply 33 1)