From 19ed602c1ba7dc2b933274f50085c9c4f0f1105c Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Sat, 14 Jan 2017 21:44:28 +0000 Subject: one -> net/ricketyspace/sicp --- one/eleven.scm | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 one/eleven.scm (limited to 'one/eleven.scm') diff --git a/one/eleven.scm b/one/eleven.scm deleted file mode 100644 index a95b7ab..0000000 --- a/one/eleven.scm +++ /dev/null @@ -1,41 +0,0 @@ -;;;; Under Creative Commons Attribution-ShareAlike 4.0 -;;;; International. See -;;;; . - -(define-module (one eleven) - #:export (recursive-fn - make-cache - alt-recursive-fn)) - -(define (recursive-fn n) - (cond ((<= n 3) n) - (else (+ (* 1 (recursive-fn (- n 1))) - (* 2 (recursive-fn (- n 2))) - (* 3 (recursive-fn (- n 3))))))) - -;;;; alternative version. faster but ugly. - -(define (make-cache) - (let ((cache (make-hash-table))) - (define (get key) - (hash-get-handle cache key)) - (define (set key value) - (hash-create-handle! cache key value) - ;; return value as a side effect. - value) - (lambda args - (apply (case (car args) - ((get) get) - ((set) set) - (else (error "Invalid method"))) - (cdr args))))) - -(define (alt-recursive-fn cache n) - (let ((v (cache 'get n))) - (cond (v (cdr v)) - ((<= n 3) - (cache 'set n n)) - (else (cache 'set n - (+ (* 1 (alt-recursive-fn cache (- n 1))) - (* 2 (alt-recursive-fn cache (- n 2))) - (* 3 (alt-recursive-fn cache (- n 3))))))))) -- cgit v1.2.3