summaryrefslogtreecommitdiff
path: root/gcd.erl
diff options
context:
space:
mode:
Diffstat (limited to 'gcd.erl')
-rw-r--r--gcd.erl28
1 files changed, 28 insertions, 0 deletions
diff --git a/gcd.erl b/gcd.erl
new file mode 100644
index 0000000..484bd9e
--- /dev/null
+++ b/gcd.erl
@@ -0,0 +1,28 @@
+% Synopsis:
+%
+% $ escript gcd.erl 11 22 33 121
+%
+% or
+%
+% $ erl -compile gcd / erlc gcd.erl
+% $ erl -noshell -run gcd main 11 22 33 121
+%
+
+-module(gcd).
+-export([main/1, main/0]).
+-mode(compile).
+
+gcd2(A, 0) -> A;
+gcd2(A, B) -> gcd2(B, A rem B).
+
+gcdn(Nums) ->
+ lists:foldl(fun gcd2/2, 0, Nums).
+
+main() -> init:stop().
+
+main([]) -> init:stop();
+main(Args) ->
+ Nums = lists:map(fun erlang:list_to_integer/1, Args),
+ io:format("~w\n", [gcdn(Nums)]),
+ init:stop().
+