분류 전체보기 726

스트링 리스트에서 스트링 찾기(find) with OCaml

[파일명: testStringFindInList.ml]------------------------------------------------ open Printf;; let is_member arr s = List.exists (fun x -> x = s) arr ;; let findIndex s data = let rec loop s1 l acc = match l with | x::xs -> if x = s1 then acc else loop s1 xs (acc + 1) | [] -> -1 in let k = loop s data 0 in k ;; let printList data = let rec loop l = match l with | x::[] -> printf "%s" x | x::xs -> ..

스트링 배열 정렬(sorting)하기 with OCaml

printList 함수를 OCaml 의 함수형 언어의 특징을 살려 (꼬리 재귀호출과 match 표현을 이용하여) 구현하였다. [파일명: testSort.ml]------------------------------------------------ open Printf ;; let printList data = let rec loop l = match l with | x::[] -> printf "%s" x | x::xs -> begin printf "%s, " x; loop xs end | [] -> printf "" in printf "[" ; loop data ; printf "]" ;; (* Begin here *) let cmdArgs = Sys.argv in let args2 = Array.sub..

손으로 계산하는 긴자리 곱셈표 만들기 with OCaml

초등학교 때 배우던 두 정수의 곱셈표를 만들어 주는 F# 소스이다. 이 소스는 Python 소스를 F# 소스로 변환한 후 다시 OCaml 언어로 재작성한 것이라서 OCaml 의 명령형 언어 특징을 위주로 짜여져 있다. (* * Filename: makeMultTable.ml * * Print a multiplication table. * * Execute: ocaml makeMultTable.ml 123 450 * * Or * * Compile: ocamlc -o makeMultTable.exe makeMultTable.ml * Execute: makeMultTable 230 5100 * * Date: 2013. 2. 2). * Author: pkim __AT__ scripts.pe.kr *) open ..

손으로 만드는 나눗셈 계산표 with OCaml

다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 OCaml 소스 코드이다. 나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다. 아래의 소스는 Python 용 소스를 F# 용 소스로 거의 일대일 변환하고,또 F# 소스를 OCaml 소스로 변환한 것이라서, OCaml 언어의 명령형 언어의 특징을 위주로 짜여져 있다. 예외상황 처리 부분 try ... with ... 부분이 아직 미완성이다. (* * Filename: makeDivisionTable.ml * * Purpose: Make a division table in a handy written form. * * Execute: ocaml makeDivisionTable.ml * * Or * * Compile: ocamlc -o makeDi..

OCaml 언어로 큰 정수(big integer) 계산하기

자리수가 매우 긴 정수(큰 정수, big integer)를 계산하려면 C/C++ 언어로는 gmp 또는 mpir 라이브러리를 쓰면 되고 Java 언어로는 java.math.BigInteger 클래스를 사용하면 되고, C# 언어로는 System.Numerics.BigInteger 클래스를 사용하면 되고, Python 언어로는 long 타입(Python 이 자체적으로 알아서 int 타입과 long 타입을 자동 변환함)을쓰면 되고, Haskell 언어로는 (Int 타입 대신) Integer 타입을 쓰면 된다. F# 언어의 경우에는 F 샤프 를 참조한다, 그렇다면 OCaml 언어로는 big integer 계산을 어떻게 할까? 답은 의외로 간단하다. 이미 lib 폴더에 설치되어 있는 라이브러리 nums.cma 를 ..

7비트 ASCII 코드표 만들기 예제 with OCaml

ASCII(애스키)란 American Standard Code for Information Interchange의 줄임글로서, 영문자에 기초한 문자 인코딩이다. 이 문자 인코딩에는 C0 제어문자(C0 control character)도 포함되어 있다. ( 참고: ASCII - Wikipedia, the free encyclopedia ) 다음은 7bit ASCII 코드표를 만들어 보여주는 OCaml 소스 코드이다. 소스 코드 중에 진법변환에 필요한 함수 atoi string radix itoa number radix 를 OCaml 코드로 자체 작성하여 사용하였다. (아래의 소스는 Python 소스를 F# 소스로 일대일 변환 수정하고, 또 F# 소스를 OCaml 소스로 바꾼 것이라서 명령형 언어 특징을 위..

OCaml 에 Extlib 설치하고 사용하는 예

Extlib 는 OCaml 에 붙여 쓰는 여러 가지 (써드 파티) 라이브러리 중의 하나이며, OCaml 의 표준 라이브러리가 지원하지 않는 일들(예를 들면 UTF8 문자 지원)을 한다. 현재 최신 버전인 Extlib 1.5.3 은 OCaml 4.00.0 과 4.00.1 용 라이브러리이고, Extlib 1.5.1, 1.5.2 는 OCaml 3.12.0, 3.12.1 용 라이브러리이다 64비트 윈도우의 경우 Extlib 가 전부 설치되지 못하고, 일부(마이트 코드영 라이브러리, 설치 과정 중 1번 선택)만 설치되는 현상이 있다. 설치하는 명령은 (Extlib 의 압축이 해제된 폴더에서) Prompt> ocaml install.ml 이다. 설치 과정 중에 모두(3번)를 선택하여 설치가 실패할 경우에는 1번(바..

OCaml 3.12.1 윈도우 용 설치 시 주의할 점 (PATH 가 바뀌는 버그)

OCaml 3.12.1 윈도우 용 설치 시 주의할 점 (PATH 가 바뀌는 버그) OCaml 3.12.1 윈도우 용 인스톨러가 하는 일 중에 나쁜 일(사용자를 난감하게 하는 일)이 하나 있다. 설치 되고 나면 시스템 환경변수 중에 OCAMLLIB 를 잡아주는 것은 좋은데, PATH 를 완전 바꾸어 버린다. 원래 있던 PATH 값은 완전 사라지고, 설치된 OCaml 의 bin 폴더의 경로명과 emacs 아래의 bin 폴더의 경로명만 남아 있다. 그러므로 OCaml 3,12,1 윈도우 용을 설치하기 전에는 시스템 환경변수 PATH 의 값을 미리 별도로 저장한 다음, 설치가 끝나면 PATH 의 값을 (뿥여 넣기하여) 복구시켜 주어야 한다. 상세 내용 참조 아래는 http://protz.github.com/oc..

진법(radix) 표 만들기 예제 with OCaml

컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다. 다음은 0 에서 15 까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 OCaml 소스 코드이다. 진법 변환에 필요한 함수 int = atoi string radix (즉, atoi :: string -> int -> int ) string = itoa number radix (즉, itoa :: int -> int -> string ) 를 OCaml 코드로 자체 작성하여 사용하였다. (아래의 소스는 Python 소스를 F# 소스로 일대일 변환 수정하고, 또 F# 소스를 OCaml 소스로 바꾼 것이라서 명령형 언어 특징을 위주로 작성되어 있다. 그래서 함수형 언어의 관점으로 보면..