summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcd.lisp24
1 files changed, 24 insertions, 0 deletions
diff --git a/gcd.lisp b/gcd.lisp
new file mode 100644
index 0000000..831bb31
--- /dev/null
+++ b/gcd.lisp
@@ -0,0 +1,24 @@
+(defun gcd2 (a b)
+ (if (= b 0)
+ a
+ (gcd2 b (mod a b))))
+
+(defun gcdn (&rest numbers)
+ (reduce #'gcd2 (rest numbers)
+ :initial-value (first numbers)))
+
+; Command line access is different on different Lisps
+(defun program-args ()
+ (or
+ #+SBCL (rest *posix-argv*)
+ #+CLISP *args*
+ ;#+ECL (ext:command-args)
+ ;#+CMU extensions:*command-line-words*
+ ;#+LISPWORKS system:*line-arguments-list*
+ nil))
+
+(write (apply #'gcdn
+ (map 'list #'parse-integer (program-args))
+ ))
+(fresh-line)
+