프로그래밍/F# 31

80컬럼 컨솔에 19단표 출력하기 예제 for F#

Python용 소스파일 testForFor.py를 F# 용으로 수정한 것이다. F#의 if 구문과 for 구문이 Python의 것과 (들여쓰기하는 것 까지) 많이 닮았다. F#은 함수형 언어기도 하고 명령형 언어이기도 하므로, 여기서는 가급적 F#의 명령형 언어의 특징을 위주로 작성하였다. (* * Filename: TestForFor.fs * * Compile: fsc TestForFor.fs * Execute: TestForFor * * Date: 2010. 7. 13 *) # light let getDan dan = let t = [| for i in 1..19 -> "" |] for j in 0..(19 - 1) do let mutable sa = sprintf "%d" dan if (String..

프로그래밍/F# 2010.07.13

(최대공약수 구하기) while 반복문 없는 예제 for F#

소스 파일명: TestNoWhile.fs (* * Filename: TestNoWhile.fs * * Purpose: Example using the while loop syntax * while .... * * Compile: fsc --codepage:949 TestNoWhile.fs * Execute: TestNoWhile -200 300 *) #light // 사용법 표시 let printUsage x = printfn "Using: TestNoWhile [integer1] [integer2]" printfn "This finds the greatest common divisor of the given two integers." let cmdArgs = System.Environment.GetCo..

프로그래밍/F# 2010.07.13

(최대공약수 구하기) while... 반복문 예제 for F#

소스 파일명: TestWhile.fs (* * Filename: TestWhile.fs * * Purpose: Example using the while loop syntax * while .... * * Compile: fsc --codepage:949 TestWhile.fs * Execute: TestWhile -200 300 *) #light // 사용법 표시 let printUsage x = printfn "Using: TestWhile.py [integer1] [integer2]" printfn "This finds the greatest common divisor of the given two integers." let cmdArgs = System.Environment.GetCommandLi..

프로그래밍/F# 2010.07.13

구구단 출력 예제 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

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

F# 언어로 dnAnalytics를 이용한 행렬의 LU 분해와 SVD 분해 연습

목적: http://stackoverflow.com/questions/1907709/a-simple-wrapper-for-f-to-do-matrix-operations 에 올려진 소스에서 String.spit 관련를 문제 해결하자. 테스트를 위해 필요한 자료: dnAnalytics F# Power Pack // 파일명: TestFSharpMatrix.fs (원래 소스) #r @"D:\WORK\tools\dnAnalytics_windows_x86\bin\dnAnalytics.dll" #r @"FSharp.PowerPack.dll" open dnAnalytics.LinearAlgebra open Microsoft.FSharp.Math open dnAnalytics.LinearAlgebra.Decomposit..

프로그래밍/F# 2010.07.08