OCaml에서 함수의 정의
increment와 increment1은 인자로 a를 받아서 a+1을 반환한다.
OCaml은 함수도 값으로 취급한다. 모든 값은 타입을 갖기 때문에 함수도 타입을 갖는다.
위의 그림에서 increment와 increment1의 타입은 int -> int 이다.
위의 그림에서 두 가지 정의는 같은 의미이다. increment이 anonymous function(이름이 없는 함수)를 사용한 것 뿐이다.
각각의 함수를 4를 인자로 하여 실행하면 아래와 같은 결과를 얻을 수 있다.
이름을 정하지 않고 increment와 increment1을 실행하였기 때문에
이름 부분이 -인 것을 확인할수 있다.
이름을 지정하고 실행한다면 위와 같이 나온다.
*모든 값은 타입을 갖는다. OCaml의 타입 추론 시스템이 자동으로 정확하게 값의 타입을 추론해준다. 따라서 잘못된 타입으로 프로그래밍한다면 에러를 내준다.
increment1은 int를 받아야 하는데 string인 b를 넣어줘서 Error가 났다.
Anonymous Functions
fun은 anonymous function을 나타내는 키워드이다.
*lambda calculus에서 fun x -> e는 λ x.e로 표현된다. λ는 anonymous function을 나타낸다.
재귀 함수 Recursive function
재귀 함수를 작성할 때는 이름 앞에 rec 키워드를 붙여줘야 한다.
재귀 함수로 구현할 수 있는 대표적인 예인 factorial에 대해서 보자.
Polymorphic function
'a는 type variable로 알 수 없는 유형을 나타낸다. 항상 하나의 '로 시작한다.
(일반적으로 'a, 'b, 'c 를 사용한다. 알파, 베타, 감마)
id 42는 int인 42가 인자가 되기 때문에 a가 int 타입
id true는 bool인 true가 인자가 되기 때문에 a가 bool 타입
id "hello"는 string인 "hello"가 인자가 되기 때문에 a가 string 타입
여러 유형의 값에 적용될 수 있기 때문에 Polymorphic function이라고 한다.
이 글은 제가 Ocaml을 공부하며 작성한 글로 정확하지 않은 부분이 있을 수 있습니다.
'Ocaml' 카테고리의 다른 글
OCaml의 dune (0) | 2021.08.17 |
---|---|
OCaml에서 Function Operator와 변수의 Scope (0) | 2021.08.17 |
OCaml의 함수 2 (0) | 2021.08.16 |
OCaml의 ocaml, let, (**), #quit (0) | 2021.08.12 |
OCaml의 자료형 (0) | 2021.08.11 |
댓글