~ chicken-core (chicken-5) f945fd844bf6e24527d5dd085cdba7c0e9f57cd7
commit f945fd844bf6e24527d5dd085cdba7c0e9f57cd7
Author: Peter Bex <peter@more-magic.net>
AuthorDate: Wed Feb 11 22:02:45 2015 +0100
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sun May 31 14:20:16 2015 +0200
Improve error messages in lcm by enforcing that the checks done by gcd are performed first, which has the location available
diff --git a/library.scm b/library.scm
index 4218aa2c..e1d83657 100644
--- a/library.scm
+++ b/library.scm
@@ -1991,7 +1991,8 @@ EOF
(##sys#slot next 1)) ) ) ) ) )
(define (##sys#lcm x y)
- (abs (quotient (* x y) (##sys#internal-gcd 'lcm x y)) ))
+ (let ((gcd (##sys#internal-gcd 'lcm x y))) ; Ensure better error message
+ (abs (quotient (* x y) gcd) ) ) )
(define (lcm . ns)
(if (null? ns)
@@ -2000,9 +2001,9 @@ EOF
(next (##sys#slot ns 1)))
(if (null? next)
(if (integer? head) (abs head) (##sys#error-bad-integer head 'lcm))
- (let ((n2 (##sys#slot next 0)))
- (loop (quotient (##sys#*-2 head n2)
- (##sys#internal-gcd 'lcm head n2))
+ (let* ((n2 (##sys#slot next 0))
+ (gcd (##sys#internal-gcd 'lcm head n2)))
+ (loop (quotient (##sys#*-2 head n2) gcd)
(##sys#slot next 1)) ) ) ) ) )
;; This simple enough idea is from
Trap