프로그래밍/F# 31

이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with F#

F# 언어 소스: (* Filename: testHexView_02.fs * * Compile: fsc testHexView_02.fs * Execute: testHexView_02 [filename] * * Date: 2013. 8. 18. *) open System open System.IO let Value (c:char) = (int c) - (int 'A') + 1 let toHex n = let mutable s = "" let x1 = (n &&& 0xF0) >>> 4 let x2 = n &&& 0xF if x1 > 24 let x3 = (n &&& 0xF00000) >>> 20 let x4 = (n &&& 0xF0000) >>> 16 let x5 = (n &&& 0x..

프로그래밍/F# 2013.08.18

F# 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기

음이 아닌 실수 A 의 평방근 sqrt(A) 를 구하는 Heron 의 방법: 반복함수 g(x) = (x + A/x) / 2 를 이용 실수 A 의 n제곱근 root(n, A) 를 구하는 Newton-Raphson 의 방법 반복함수 g(x) = ((n-1)*x + A/(x**(n - 1))) / n 를 이용 n = 2 인 경우에는 Newton-Raphson 의 방법이 Heron 의 방법과 동일하다. (참조. http://en.wikipedia.org/wiki/Newton's_method ) F# 언어에는 System 모듈에 지수 계산 함수 Math.Pow(double, double) 를 불러서 사용하면 된다. 하지만 차후 필요한 데가 있을 것 같아서 이와 유사한 n 제곱 함수와 n 제곱근 함수를 구현해 보았..

프로그래밍/F# 2013.01.12

F# 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제

역삼각함수란 삼각함수의 역함수를 의미하고, 역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다. 수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, F# 언어에서는 .NET 의 System.Math.Asin(double) 함수를 사용한다. (* * Filename: testArcSine.fs * * Compile: fsc testArcSine.fs * Execute: testArcSine * * Date: 2013. 1. 2. * Copyright (c) pkim _AT_ scripts.pe.kr *) #light let sin(x: double) : double = System.Math.Sin(x) let asin(x: double) : double = System.Math.Asin(x) let s..

프로그래밍/F# 2013.01.02

F# GUI Hello 예제 (윈도우 7 용)

Visual Studio 2010 을 설치하면 Visual F# 도 함께 설칟히기 때문에 Visual Studio 2008 때 처럼 Visual F# 을 별도로 설치하지 않아도 된다. 2011년 3월 3일에 Visual Studio 2010 Service Pack 1 이 출시되면서 Visual F# 도 업데이트되었다. FSharp 홈페이지: http://www.fsharp.net/ 다음은 간단한 F# Hello 예제이다. 컨솔 출력을 위해 printfn 함수를 쓰고 았다 printfn "Hello" printfn "안녕하세요?" 저 소스를 파일명 hello.fs (또는 hello.fsx) 로 저장하였다면, fsc --codepage:949 hello.fs 명령으로 컴파일한다, 그러면 실행파일 hello...

프로그래밍/F# 2011.08.24

F# 용 GUI Hello 예제

Visual Studio 2010 을 설치하면 Visual F# 도 함께 설칟히기 때문에 Visual Studio 2008 때 처럼 Visual F# 을 별도로 설치하지 않아도 된다. 2011년 3월 3일에 Visual Studio 2010 Service Pack 1 이 출시되면서 Visual F# 도 업데이트되었다. FSharp 홈페이지: http://www.fsharp.net/ 다음은 간단한 F# Hello 예제이다. 컨솔 출력을 위해 printfn 함수를 쓰고 았다 printfn "Hello" printfn "안녕하세요?" 저 소스를 파일명 hello.fs (또는 hello.fsx) 로 저장하였다면, fsc --codepage:949 hello.fs 명령으로 컴파일한다, 그러면 실행파일 hello...

프로그래밍/F# 2011.08.14

F# 윈도우 애플리케이션에서 마우스 이벤트 감지하기 2

F# 프로그램으로 버튼의 마우스 이벤트를 감지하여 버튼의 색깔을 변경하는 윈도우폼 애플리케이션을 작성해 보았다. 실행시키고 버튼을 클릭할 때마다 버튼의 색깔이 바뀐다. // Filename: ClickForm5.fs // // Compile: fsc --codepage:949 ClickForm5.fs // Execute: ClickForm5 // Import useful .NET namespaces open System open System.Drawing open System.Windows.Forms // Create the form and a label objects let frm = new Form(Text = "버튼 이벤트 핸들러 테스트", Height = 200) let btn = new Butt..

프로그래밍/F# 2010.08.11

F# 윈도우 애플리케이션에서 마우스 이벤트 감지하기

F# 프로그램으로 마우스 이벤트를 감지하는 간단한 윈도우폼 애플리케이션을 작성해 보았다. 실행시키고 라벨이 았는 곳을 클릭하면 클릭 횟수가 하나씩 증가한다. (* * Filename: TestMouseDownEvent.fs * * Compile: fsc TestMouseDownEvent.fs * Execute: TestMouseDownEvent * * Date: 2010/07/23 * Author: phkim pkim __AT__ scripts.pe.kr *) open System open System.Drawing open System.Windows open System.Windows.Forms // Creates the user interface let frm, lbl = new Form (), ne..

프로그래밍/F# 2010.07.23

30000! 빨리 계산하기 with F#

* 꼬리 재귀호출과 패턴 매칭을 이용하여 구현한 팩토리얼과 피보나치 수열 계산 (* Filename: fact.fs Rapid factorial and fibonacci seq implementations by pattern matching and tail recursive call Compile: fsc fact.fs Execute: fact Date: 2010/07/20 Author: phkim pkim __AT__ scripts.pe.kr *) #light let rec fact (n:int) : bigint = match n with | 0 | 1 -> 1I | k -> (bigint k) * (fact (k-1)) let factorial n = let rec loop acc k = match ..

프로그래밍/F# 2010.07.20

int 타입과 bigint 타입 간 상호 변환 with F#

F# 언어에서 int 타입과 bigint 타입을 상호변환 하는 것은 의외로 쉽다. 명령 프롬프트> fsi Microsoft (R) F# 2.0 Interactive build 2.0.0.0 Copyright (c) Microsoft Corporation. All Rights Reserved. For help type #help;; > let a = 100I;; val a : System.Numerics.BigInteger = 100I > let b = int a;; val b : int = 100 > let c = bigint b;; val c : System.Numerics.BigInteger = 100I > b**5;; b**5;; ^ stdin(13,1): error FS0001: The type ..

프로그래밍/F# 2010.07.18

Pollard's rho method 소개: 정수의 인수분해(factorizing integers) with F#

정의 (소수와 합성수) 1보다 큰 양의 정수 n에 대하여 (i) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하면, n을 합성수(合成數, composite number)라고 한다. 참고로 이 경우, a, b 중에 적어도 하나는 sqrt(n) 보다 작거나 같다. 합성수의 예로는 4, 6, 9, 24, 143 등이 있다. (ii) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하지 않으면, 즉 n을 두 양의 정수의 곱으로 표현하는 방법이 1*n과 n*1 두 가지 뿐이면, n을 소수(素數, prime number)라고 한다. 소수의 예로는 2, 3, 5, 7, 11 등이 있다. n이 소수인지 아닌지 확인하려면, n을 2 보다 크거나 같고 sqrt(n) 보다 작거..

프로그래밍/F# 2010.07.17