OCaml 배우는 방법

OCaml을 처음부터 시작하는 방법을 한눈에 살펴봐요


Exercism은 연습 문제와 피드백을 제공하지만, OCaml을 처음 배우는 사람이라면 바로 뛰어들기가 어려울 수 있어요. 다음 자료들이 시작하는 데 도움이 될 거예요:

OCaml의 문서는 여러 프로젝트에 흩어져 있어서 찾기 어려울 수 있어요. 컴파일러와 함께 딸려 오는 아주 최소한의 라이브러리인 표준 라이브러리와, 더 완전하고 일관된 표준 라이브러리를 제공하려는 Jane Street의 별도 프로젝트인 Core 라이브러리가 있기 때문이에요.

헷갈리게도, 표준 라이브러리를 core 라이브러리라고 부르기도 해요(Core 라이브러리라고 부르는 경우는 드물지만요).

Jane Street의 Core 라이브러리는 몇몇 연습 문제에 필요하지만, 모든 문제에 유용하게 쓸 수 있어요. Core 라이브러리는 Base, Core_kernel, Core 이렇게 세 부분으로 나뉘고, 각각 앞의 것을 확장한 거예요. 대부분의 연습 문제에는 Base만 있으면 충분하지만, 몇몇 문제에는 Core_kernel이 필요해요(예를 들어 날짜를 다루는 경우요). Core를 사용하려면 코드 맨 위에 open Base나 open Core_kernel을 넣어요.

예를 들어 표준 라이브러리의 List 대신 Base.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/)에서 섀도우된 버전을 쓰게 돼요(open Base를 하면 이걸 List라는 이름으로 쓸 수 있어요).

표준 라이브러리의 List 모듈과 Core의 List 사이에는 미묘한 차이도, 그렇지 않은 차이도 있어요. 예를 들어 표준 라이브러리에서 List.for_all의 시그니처는

val for_all : ('a -> bool) -> 'a list -> bool

이고, Core 라이브러리에서는

val for_all : 'a t -> f:('a -> bool) -> bool

예요.

그 결과, 리스트의 모든 숫자가 10보다 작은지 확인하려면 컴파일러에 딸린 core List 모듈에서는 이렇게 작성해야 해요:

List.for_all (fun x -> x < 10) list

그리고 Core List 모듈에서는 이렇게 작성해야 해요:

List.for_all list (fun x -> x < 10)

또는 (가급적이면) 이렇게요:

List.for_all ~f:(fun x -> x < 10) list

한 가지 조언을 드리자면, 정말로 Core에서 필요한 것을 찾을 수 없는 경우가 아니라면 Core 라이브러리에 집중하고 표준 라이브러리는 잊어버려요.