본문 바로가기

23년 1학기 학교공부/프로그래밍언어개론

[OCaml] Introduction to OCaml

목차

    728x90
    반응형
    SMALL

    📁 OCaml이란?

    OCaml = Objective Caml.

    Caml에 객체지향(OOP)개념을 추가하여 확장한 버전

    Caml : ML family에 속하는 프로그래밍 언어

     

    🔎 ML이란?

    Meta Language. 다른 언어를 기술하거나 분석하는 데 쓰는 언어를 의미한다.

     

    📁 Ocaml의 특징

    1. Functional programming language

     

    2. Strongly typed language

    3. Type inference

    4. Polymorphism

    5. Pattern matching

    6. Module system

     

    Ocaml을 사용하는 이유함수형 언어의 유용한 특징을 다양한 언어에서 차용하는 추세이다.e.g.) C++, Java 등의 프로그래밍 언어에서 람다표현식, 다양한 함수형 라이브러리를 도입. 코드를 보다 간결하고 명확하게 작성할 수 있어짐.

     

    OCaml은 대표적인 함수형 언어 중 하나로써 다양한 학교 및 산업계에서 활용학계 : KAIST, SNU, ENS 등에서 교육 및 연구에 활용산업계 : Facebook, Docker, Jane Street 등에서 "안전한" 소프트웨어 개발에 활용

     

    C vs. Ocaml

    example 1. 배열에서 짝수만을 선별해 새로운 배열 생성 후 출력하는 예제

    // C
    int main() {
    	int arr[10] = {1,2,3,4,5,6};
        int even_arr[3];
        int index = 0;
        // Filtering
        for (int i=0; i<10; ++i) {
        	if (arr[i] % 2 = 0) {
            	even_arr[index++] = arr[i];
            }
        }
        // Printing
        for (int i=0; i<10; ++i) {
        	print("%d ", even_arr[i]);
        }
        return 0;
    }
    (* OCaml *)
    let _ =
    	let arr = [1;2;3;4;5;6] in
        	(* Filtering *)
        	let res = List.filter
            	(fun x -> (x mod 2) = 0) arr
            in
            (* Printing *)
            List.iter
            	(fun x -> Format.print "%d " x) res

    example 2. 두 정수의 최대공약수 계산 예제

    // C (iterative)
    int gcd(int a, int b) {
    	int r;
        while ((r = a%b) != 0) {
        	a = b;
            b = r;
        }
        return b;
    }
    // C (recursive)
    int gcd(int a, int b) {
    	int r = a % b;
        if (r == 0) return b;
        else return gcd(b, r);
    }
    (* OCaml *)
    let rec gcd a b =
    	let r = a mod b in
        if r = 0 then b
        else gcd b r

     

    OCaml 기본

    1. OCaml의 소스코드 확장자 : .ml

    2. OCaml은 명시적인 main 함수가 없다. 소스코드를 위에서 아래로 순차적 실행.

    3. OCaml 컴파일러 : ocamlc

    4. OCaml 빌드 시스템 : dune

     

    728x90
    반응형
    LIST