소스 파일명: TestNoWhile.ml
- (*
- * Filename: testNoWhile.ml
- *
- * Purpose: Example not using the while loop syntax
- * while ....
- *
- * Execute: ocaml testNoWhile.ml -200 300
- *
- * Or
- *
- * Compile: ocamlc -o testNoWhile.exe testNoWhile.ml
- * Execute: testNoWhile -200 300
- *)
- (* 사용법 표시 *)
- let printUsage() =
- Printf.printf "Using: testNoWhile.py [integer1] [integer2]\n";
- Printf.printf "This finds the greatest common divisor of the given two integers.\n";;
- let cmdArgs = Sys.argv;;
- if not ((Array.length cmdArgs) == 3) then
- printUsage();
- if not ((Array.length cmdArgs) == 3) then
- exit 1;;
- (*
- // --------------------------------------
- // 명령행 인자의 두 스트링을 가져와서
- // 정수 타입으로 변환하여
- // 변수 val1과 val2에 저장한다.
- *)
- let val1 = int_of_string cmdArgs.(1);;
- let val2 = int_of_string cmdArgs.(2);;
- let a = ref (abs val1);;
- let b = ref (abs val2);;
- let max x y = if y > x then y else x;;
- let min x y = if y > x then x else y;;
- let maxab = max !a !b;;
- let minab = min !a !b;;
- (* a는 |val1|, |val2| 중 큰 값 *)
- a := maxab;;
- b := minab;;
- (*
- // --------------------------------------
- // 재귀호출 Euclidean 알고리즘
- //
- // Euclidean 알고리즘의 반복 (나머지가 0이 될 때 까지)
- // 나머지가 0이면 그 때 나눈 수(제수) x가 최대공약수(GCD)이다.
- *)
- let rec gcdRecursive x y =
- match y with
- | 0 -> x
- | _ -> gcdRecursive y (x mod y);;
- let gcd = gcdRecursive !a !b;;
- (* 최대공약수(GCD)를 출력한다. *)
- Printf.printf "GCD(%d, %d) = %d\n" val1 val2 gcd;
- exit 0;;
컴파일:
Command> ocamlc -o testNoWhile.exe testNoWhile.fs
실행:
Command> testNoWhile
Using: testNoWhile [integer1] [integer2]
This finds the greatest common divisor of the given two integers.
Command> testNoWhile -200 300
GCD(-200, 300) = 100
Command> testNoWhile -200 0
GCD(-200, 0) = 200
Command> testNoWhile 125 100
GCD(125, 100) = 25
Command> testNoWhile 23 25
GCD(23, 25) = 1
'프로그래밍 > OCaml' 카테고리의 다른 글
현재 시각 알아내기 for OCaml (0) | 2013.01.27 |
---|---|
80컬럼 컨솔에 19단표 출력하기 예제 for OCaml (0) | 2013.01.27 |
(최대공약수 구하기) while... 반복문 예제 for OCaml (0) | 2013.01.26 |
구구단 출력 예제 for OCaml (0) | 2013.01.26 |
명령행 인자 처리 예제 for OCaml (0) | 2013.01.26 |