learning-sicp

My embarrassing half assed SICP run.
Log | Files | Refs

commit 730f1989c05b6c11ebc940bccddf1e7dc3e8c8f6
parent 8b3563174af7e102fd063551c842e9cf0ac2edf2
Author: Yuval Langer <yuval.langer@gmail.com>
Date:   Thu, 13 Apr 2023 20:17:14 +0300

Add exercise 3.8 solution.

Diffstat:
MMakefile | 3+++
Asicp/solutions/3_8.scm | 19+++++++++++++++++++
Asicp/tests/3_8.scm | 13+++++++++++++
3 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -4,6 +4,9 @@ poop: statistics: guile -L . sicp/statistics.scm +3.8: + guile -L . sicp/tests/3_8.scm + 3.7: guile -L . sicp/tests/3_7.scm diff --git a/sicp/solutions/3_8.scm b/sicp/solutions/3_8.scm @@ -0,0 +1,19 @@ +(define-library (sicp solutions 3_8) + (import (scheme base)) + (export + make-f + ) + + (begin + (define (make-f) + (define first-internal-value 'still-undecided) + + (define (f x) + (if (eq? first-internal-value 'still-undecided) + (begin + (set! first-internal-value + x) + 0) + x)) + + f))) diff --git a/sicp/tests/3_8.scm b/sicp/tests/3_8.scm @@ -0,0 +1,13 @@ +(define-library (sicp tests 3_8) + (import (scheme base)) + (import (srfi srfi-64)) + (import (only (sicp solutions 3_8) make-f)) + + (begin + (define f (make-f)) + + (test-begin "3.8") + (test-equal + 1 ; Turns out it starts with the right one. + (+ (f 0) (f 1))) + (test-end "3.8")))