[함수형언어] 3주차 수업 내용 정리
04.25 3주차 수업 내용 정리
튜플 Tuple 組
- 구조적 데이터 構造データ: 내부에 데이터를 포함하는 데이터
- 튜플 Tuple 組
- 복수 데이터를 컴마로 묶은 구조적 데이터
- 서로 다른 자료형끼리도 튜플로 묶을 수 있다.
ex: ("January", 1, 31)
- 튜플을 튜플로 묶는 것도 가능하다.
ex: (("January", 1, 31))
- 튜플 전체가 하나의 데이터이므로, 이름을 붙이거나 함수에 파라미터로써 전달할 수 있다.
(1, 4) ;;
(* - : int * int = (1, 4) *)
(* 위와 같이 곱하기로 자료형을 표시함 *)
match문 パターンパッチ
- OCaml에서 구조적 데이터를 쪼개어 안에 있는 데이터를 꺼내 쓰기 위해서는, match문 パターンパッチ를 이용한다. 형식은 아래와 같으며, 식 1을 실행한 뒤 그 결과를 패턴과 조합해 식 2를 실행하는 방식이다.
match 식 1 with 패턴 -> 식 2
match (3.0, 4.0) with
(a, b) -> sqrt(a *. a +. b *. b)
(* - : float = 5 *)
let kyori pair = match pair with
(a, b) -> sqrt(a *. a +. b *. b)
kyori (3.0, 4.0)
(* - : float = 5 *)
- 디자인 레시피를 작성할 때도 잊지 말고 ‘템플릿’을 추가하도록 하자. 이때 템플릿이란 구조적 데이터를 쪼개어 match문을 작성하는 것을 말한다.
레코드 レコード
{필드명 1 = 데이터 1; 필드명 2 = 데이터 2; ...}
의 형식으로 작성한다. 필드명과 데이터의 값이 한 쌍이 된다.- 레코드에서 작성 순서는 중요하지 않다. 필드명 1을 먼저 작성하든, 필드명 2를 작성하든 결과적으로 같은 값이다.
- 레코드 역시 튜플과 마찬가지로 전체가 하나의 값이다.
- 레코드 선언 시, 반드시 해당 레코드의 필드명과 자료형을 함께 선언해야 한다. 이때 형 정의를 위해 type문을 사용한다.
type gakusei = {
namae: string;
tensuu: int;
seiseki: string;
}
- 한 프로그램 내에 존재하는 모든 필드명은 서로 달라야 한다.
(* 학생의 구조적 데이터를 받아 성적통지문을 작성하는 함수 tsuuchi *)
let tsuuchi gakusei = match gakusei with
{namae = n; tensuu = t; seiseki = s} ->
n ^ "さんの点数は" ^ string_of_int t ^ "点で、成績は" ^ s ^ "です。"
(* int 자료형의 t를 string으로 변환해 사용함 *)