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)