2010/07/12 8

구구단 출력 예제 for F#

F# 언어는 함수형 언어이면서도 명령형 언어의 특징을 대부분 가지고 잇다. 따라서 보통의 for 구문을 쓸 수도 있고, 재귀호출 함수릉 만들어 쓸 수도 있다. 아래의 소스에서 함수 printDan 은 보통의 for 구문을 쓴 것이고 함수 printAnotherDan 은 재귀호출 함수를 쓴 것이다. 소스 파일명: forTest.fs ------------------------------[소스 시작] let printDan dan = for i in 1..9 do printfn "%d x %d = %d" dan i (dan*i) let printAnotherDan (dan : int) = let rec loop l = match l with | x :: xs -> printfn "%d x %d = %d" d..

프로그래밍/F# 2010.07.12

명령행 인자 처리 예제 for F#

Python 언어에서 명령행 인자는 sys.argv 라는 변수로 처리한다. sys.argv는 모듈 sys에 속하는 변수 argv를 의미하며, 이는 명령행 실행시 옵션으로 입력된 인자들을 스트링 값으로 모아둔 리스트형의 변수이다. 모듈 sys을 하기 위해서는 import sys 라는 수입(import) 구문을 소스 선두 부분에 적어주어야 한다. C/C++/Java/Ruby 언어들과는 달리 리스트의 0번의 값(즉 sys.argv[0])은 python 명령 바로 다음에 입력된 (실행될) Python 소스파일명을 가리키므로, 1번부터 처리해야 한다. 즉 Python 언어에서 sys.argv[1], sys.argv[2], sys.argv[3], ... 들이 각각 C 언어의 argv[0], argv[1], argv..

프로그래밍/F# 2010.07.12

Hello 예제 for F#

컨솔에 문자 출력하는 F# 구문은 print "문자열(스트링)" 과 printfn "문자열(스트링)" 이다. 여기서 printfnd는 출력 후 개행한다는 것만 다르나. 소스 파일명: hello.fs ------------------------------[소스 시작] printfn "Hello, world!" ------------------------------[소스 끝] (한글이 있는 소스는 옵션 --codepage:949 를 사용하여 컴파일한다.) 컴파일> fsc hello.fs 실행> hello Hello, world!

프로그래밍/F# 2010.07.12

두 자리 수 곱셈 계산 쉽게 하기

십의 자리수가 같고 1의 자리수를 합하면 10이 되는 두 자연수위 솝셈을 쉽고 빨리 계산하는 방법을 소개 한다. 25 75 81 63 19 x) 25 x) 75 x) 89 x) 67 x) 11 625 5625 7209 4221 209 1의 자리수를 곱하여 그 아래에 자리를 맞추어 적어둔다. 그 왼 쪽에는 10의 자리수 둘 중 하나만 플러스 1 하여 서로 곱한다. 예를 들어 25*25의 경우에는 10의 자리수가 2와 2인데 둘 중 하나만 플러스 1 하면 3과 2가 된다. 이 둘을 곱하면 6이다. 이를 또 그 밑에 1의 자리수 곱하여 적어둔 그 좌측에 자리를 맞추어 붙여주면 계산이 끝난다. 이 과정을 좀 더 상세하게 설명하면 25 x) 25 25

구구단 계산을 덧셈 뺄셈 만으로 하기

중학교 수학만 공부한 사람이면 누구나 아는 계산식 ab = ((a + b)^2 - (a - b)^2)/4 를 이용하는 곱셈 계산법에 대해서 알아 보자. n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 G(n) 0 0 1 2 4 6 9 12 16 20 25 30 36 42 49 56 64 72 81 (위의 표에서 G(n) = n*n/4 = (n^2)/4 이다, ) G(n) = k^2 if n = 2k (짝수), G(n) = k(k+1) = k^2 + k if n = 2k + 1 (홀수) 임을 이용해도 된다. 이 때는 제곱수만 기억하고 있으면 된다. 예를 들어 8*7 의 값을 구한다고 하자. 먼저 8과 7의 합과 차를 구한다. 8 + 7 = 15 8 - 7 = 1 이다..

F# 프로그래밍에서 정수인지 부동소수점수인지 구분하기

필요한데가 많을 것 같아서 올려 놓는다. // See http://msdn.microsoft.com/en-us/library/dd233248.aspx let (|Integer|_|) (str: string) = let mutable intvalue = 0 if System.Int32.TryParse(str, &intvalue) then Some(intvalue) else None let (|Float|_|) (str: string) = let mutable floatvalue = 0.0 if System.Double.TryParse(str, &floatvalue) then Some(floatvalue) else None let parseNumeric str = match str with | Integer..

프로그래밍/F# 2010.07.12

F# 프로그래밍에서 한글 문제

F# 프로그래밍 중에 한글 출력을 시도하였다. 그러나 당연히 되리라고 믿었던 printfn 에 의한 한글 출력이 되지 않았다. printfn "한글" 이 한 줄 짜리 F# 소스를 컴파일하고 실행하면 ??? 가 출력된다. 소스를 UTF8 인코딩으로 저장해 보기도 하고, 명령창을 chcp 65001 하여 UTF8 창으로 바꾸어 보기도 하였지만 허사였다. 인터넷 검색을 해보아도 해결책을 찾지 못했다. 아마도 F# 언어를 사용하는 사람들은 적어도 한글을 안써도 되는 듯... (.NET에서 한글을 못 쓰면 문제가 많을텐데...) 그러나 알고 보면 쉬운 것. fsc 로 컴파일할 때 --codepage:숫자 옵션으로 인코딩 숫자(예를 들어 949)를 지정하면 된다. 우선 F# 소스를 하나 보자 // 파일명: hell..

프로그래밍/F# 2010.07.12