소스 파일명: TestNoWhile.ml

  1. (*
  2.  *  Filename: testNoWhile.ml
  3.  *
  4.  *  Purpose:  Example not using the while loop syntax 
  5.  *                while ....
  6.  * 
  7.  *  Execute: ocaml testNoWhile.ml -200 300
  8.  * 
  9.  *    Or
  10.  * 
  11.  *  Compile: ocamlc -o testNoWhile.exe testNoWhile.ml
  12.  *  Execute: testNoWhile -200 300
  13.  *)
  14. (* 사용법 표시 *)
  15. let printUsage() =
  16.     Printf.printf "Using: testNoWhile.py [integer1] [integer2]\n";
  17.     Printf.printf "This finds the greatest common divisor of the given two integers.\n";;
  18. let cmdArgs = Sys.argv;; 
  19. if not ((Array.length cmdArgs) == 3) then
  20.     printUsage();
  21. if not ((Array.length cmdArgs) == 3) then
  22.     exit 1;;
  23. (*
  24. // --------------------------------------
  25. // 명령행 인자의 두 스트링을 가져와서
  26. // 정수 타입으로 변환하여
  27. // 변수 val1과 val2에 저장한다.
  28. *)
  29. let val1 = int_of_string cmdArgs.(1);;
  30. let val2 = int_of_string cmdArgs.(2);;
  31. let a = ref (abs val1);;
  32. let b = ref (abs val2);;
  33. let max x y = if y > x then y else x;;
  34. let min x y = if y > x then x else y;;
  35. let maxab = max !a !b;;
  36. let minab = min !a !b;;
  37. (* a는 |val1|, |val2| 중 큰 값 *)
  38. a := maxab;;
  39. b := minab;;
  40. (*
  41. // --------------------------------------
  42. // 재귀호출 Euclidean 알고리즘
  43. //
  44. //     Euclidean 알고리즘의 반복 (나머지가 0이 될 때 까지)
  45. //     나머지가 0이면 그 때 나눈 수(제수) x가 최대공약수(GCD)이다.
  46.  *)
  47. let rec gcdRecursive x y =
  48.     match y with
  49.     | 0 -> x
  50.     | _ -> gcdRecursive y (x mod y);;
  51. let gcd = gcdRecursive !a !b;;
  52. (* 최대공약수(GCD)를 출력한다. *)
  53. Printf.printf "GCD(%d, %d) = %d\n" val1 val2 gcd;
  54. 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



Posted by Scripter
,