소스 파일명: TestNoWhile.fs

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



컴파일:

Command> fsc 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
,