Sfoglia il codice sorgente

Update euclid to return nil on negative args

Lily Carpenter 9 anni fa
parent
commit
aaa8abb33d
1 ha cambiato i file con 11 aggiunte e 6 eliminazioni
  1. 11 6
      chapter-1/euclid.lisp

+ 11 - 6
chapter-1/euclid.lisp

@@ -13,15 +13,20 @@
13 13
 
14 14
 (defun euclid (m n)
15 15
   "Calculates the common divisor between m and n"
16
-  (unless (> m n)
17
-    (euclid n m))
18
-  (let ((r (mod m n)))
19
-    (if (= r 0)
20
-        n
21
-        (euclid n r))))
16
+  (when (> 0 m n)
17
+    (return-from euclid nil))
18
+  (if (< m n)
19
+      (euclid n m)
20
+      (let ((r (mod m n)))
21
+        (if (= r 0)
22
+            n
23
+            (euclid n r)))))
22 24
 
23 25
 ;; Tests
24 26
 (ql:quickload "prove")
25 27
 (prove::plan 3)
26 28
 (prove::is (euclid 235 95) 5)
27 29
 (prove::is (euclid 119 544) 17)
30
+(prove::is (euclid -5 94) nil)
31
+(prove::is (euclid 94 -5) nil)
32
+(prove::is (euclid -94 -5) nil)