diff options
Diffstat (limited to 'prime?')
-rw-r--r-- | prime?/prime-test.scm | 35 | ||||
-rwxr-xr-x | prime?/prime.scm | 17 |
2 files changed, 52 insertions, 0 deletions
diff --git a/prime?/prime-test.scm b/prime?/prime-test.scm new file mode 100644 index 0000000..3add85a --- /dev/null +++ b/prime?/prime-test.scm @@ -0,0 +1,35 @@ +;; -*- compile-command: "guile -L . prime-test.scm"; -*- +(use-modules (srfi srfi-64) + (prime)) + +(test-begin "harness") + + +(test-assert "test-not-prime-0" + (not (prime? 12))) + +(test-assert "test-not-prime-1" + (not (prime? 21))) + +(test-assert "test-prime" + (prime? 13)) + +(test-assert "test-prime-large" + (prime? 1000033)) + +(test-assert "test-two" + (prime? 2)) + +;; one is NOT considered prime! +(test-assert "test-one" + (not (prime? 1))) + +;; zero is NOT considered prime! +(test-assert "test-zero" + (not (prime? 0))) + +(test-assert "test-negative" + (not (prime? -13))) + + +(test-end "harness") diff --git a/prime?/prime.scm b/prime?/prime.scm new file mode 100755 index 0000000..3d08a35 --- /dev/null +++ b/prime?/prime.scm @@ -0,0 +1,17 @@ +(define-module (prime)) + + +(define-public (prime? n) + "Returns #t if N is prime, else #f." + + (define (prime-helper n d) + "Recursively checks if N is a prime number +by attempting division by number D,D-1,D-2..." + (cond + ((< d 2) #t) + ((zero? (remainder n d)) #f) + (#t (prime-helper n (1- d))))) + + (if (< n 2) + #f + (prime-helper n (quotient n 2)))) |