|
@@ -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)
|