2 minute read


04.10 1주차 수업 내용 정리

입력과 출력

  • OCaml 인터프리터에 3이라고 입력 후 ;을 연속으로 2개 입력한 뒤, 엔터를 입력해 보자. 이것만으로도 훌륭한 프로그램이다.
  • 위 입력의 결과는 - : int = 3이라고 출력된다. ‘직전 값의 결과는 int 자료형으로, 값은 3이다’라는 의미이다. 이처럼 OCaml은 결과를 출력할 때 그 자료형도 항상 함께 출력한다.
  • OCaml에서는 컴파일러 사용 없이 바로 실행 후 결과를 확인한다.


정수형 int, 실수형 float

  • 소수점이 있는 숫자는 실수 자료형 float이다.
  • OCaml은 정수와 실수를 엄격하게 구분하고 있으며, 사칙연산에 쓰이는 연산자도 다르다. 아래의 연산자를 제외한 괄호 등의 사용법은 동일하다.
  • 3.14 + 5 ;;와 같이 정수와 실수를 혼용할 경우 에러가 발생한다. ’해당 표현식은 실수 자료형이나, 연산자는 자료형을 정수형으로 예상함’이라는 내용의 에러 메시지가 출력된다.
연산 종류 정수 실수
덧셈 + +.
뺄셈 - -.
곱셈 * *.
나눗셈 / /.
나머지 mod  
거듭제곱   **


문자열 string

  • 문자열은 ", 쌍따옴표로 묶는다.
  • 두 개의 문자열을 하나로 붙일 때는 ^ 연산자를 사용한다. 예시: "Hello " ^ "World!"


진위값 bool

  • true, false 둘 중 하나의 값을 나타낸다.
  • 조건 분기를 배울 때 자세히 다룰 예정.


변수의 정의

  • let 변수 = 식의 형태로 변수를 정의한다. 식의 실행 결과에 변수의 이름을 붙이는 것이다.
# let pi = 3.1415 ;;
val pi : float = 3.1415
(* pi라는 값이 정의되었으며, 그 자료형은 실수형이고 값은 3.1415이다. *)

(* 변수 정의 이후, 3.1415 대신 pi를 사용하는 것이 가능 *)
# pi *. 2. ;;
- : float = 6.283


  • OCaml의 변수명은 무조건 알파벳 소문자로 시작해야 한다. 두 번째 글자부터는 대문자, 소문자, 숫자 등을 자유롭게 사용하는 것이 가능하다.
  • OCaml에서의 변수란, C 등의 절차적 언어에서의 상수(const, 일본어로 定数)와 비슷하다. 즉 한 번 선언하면 변수의 값을 변경하는 것이 불가능하다.
  • 값의 변경이 불가능하다면 프로그램을 작성하는 것이 어렵다고 생각할 수 있으나, 프로그램의 신뢰성은 매우 높아진다.


함수의 정의

  • let 함수 파라미터 ... = 식의 형태로 변수를 정의한다. 식의 실행 결과에 변수의 이름을 붙이는 것이다. 파라미터에 괄호나 쉼표는 사용하지 않는다.
 # let square x = x *. x ;;
 val square : float -> float = <fun>
 (* float 자료형의 파라미터 -> float 자료형의 값을 도출하는 함수 *)
 
 # square pi ;;
 - : float = 9.86902225

 (* 파라미터가 2개인 함수 *)
 # let kyori x y = sqrt (square x +. square y) ;;
 val kyori : float -> float -> float = <fun>
 (* float 자료형의 파라미터 -> float 자료형의 파라미터 -> float 자료형의 값을 도출하는 함수 *)
 
 # kyori 3.0 4.0 ;;
 - : float = 5.
  • OCaml에서 함수의 자료형은, 파라미터로 받은 자료형과 결과로써 도출하는 값의 자료형 양쪽을 지정한다. 위 코드에서 square 함수가 파라미터로 상수형을 받는 것은, 연산자가 *.이기 때문.
  • OCaml은 프로그램에서 실행되는 명령을 보고, 그로부터 함수의 자료형을 자동적으로 추론한다. 만일 square 함수에 상수형이 아닌 다른 자료형의 값이 파라미터로 주어진다면 에러를 일으킨다.
  • 함수 kyori 역시 OCaml이 자동적으로 자료형을 추론하고 있다.


자료형 추론

  • 코드를 작성할 때 자료형을 명시하지 않아도, 자동으로 형을 추론한다.


자료형 체크

  • OCaml은 프로그램 실행 전에, 자료형이 일치하는지 확인한다. 따라서 실행 시 자료형 에러가 발생하지 않음을 이론적으로 보장한다.