learning-sicp

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

commit 7329941702c20f3ab94e8a3544a4785cf49f92aa
parent 13dba597cc44a16ce58771aa698f3f8d3a16b598
Author: Yuval Langer <yuval.langer@gmail.com>
Date:   Sun, 16 Apr 2023 16:02:03 +0300

Fix terrible terrible bugs.

Diffstat:
Msicp/solutions/3_19.scm | 15+++++++--------
Msicp/tests/3_19.scm | 47++++++++++++++++++++++++++++++++++++-----------
2 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/sicp/solutions/3_19.scm b/sicp/solutions/3_19.scm @@ -1,4 +1,4 @@ -(define-library (sicp solutions 3_18) +(define-library (sicp solutions 3_19) (import (scheme base)) (export cyclic?) @@ -8,14 +8,13 @@ (define (cyclic?' tortoise hare) (cond ((or (null? hare) - (null? (cdr hare)) - (null? (cddr hare))) + (null? (cdr hare))) #f) - (if (memq tortoise hare) - #t - (cyclic?' (cdr tortoise) - (cddr hare))))) + ((eq? tortoise hare) #t) + (else + (cyclic?' (cdr tortoise) + (cddr hare))))) (if (null? l) #f - (cyclic? l (cdr l)))))) + (cyclic?' l (cdr l)))))) diff --git a/sicp/tests/3_19.scm b/sicp/tests/3_19.scm @@ -1,25 +1,50 @@ -(define-library (sicp tests 3_18) +(define-library (sicp tests 3_19) (import (scheme base)) (import (srfi :1)) (import (srfi :64)) - (import (only (sicp solutions 3_18) cyclic?)) + (import (only (sicp solutions 3_19) cyclic?)) (begin - (test-begin "3.18") + (test-begin "3.19") - (define a (list 1 2 3)) + (define (make-cyclic lst) + (set-cdr! (last-pair lst) lst) + lst) - (define b - (let ([a (list 1 2 3)]) - (set-cdr! (last-pair a) a) - a)) + (test-equal + #f + (cyclic? '())) + + (test-equal + #f + (cyclic? '(1))) (test-equal #f - (cyclic? a)) + (cyclic? '(1 2))) + + (test-equal + #f + (cyclic? '(1 2 3))) + + (test-equal + #t + (cyclic? + (make-cyclic (list 1)))) + + (test-equal + #t + (cyclic? + (make-cyclic (list 1 2)))) + + (test-equal + #t + (cyclic? + (make-cyclic (list 1 2 3)))) (test-equal #t - (cyclic? b)) + (cyclic? + (make-cyclic (list 1 2 3 4)))) - (test-end "3.18"))) + (test-end "3.19")))