OCamlμ—μ„œλŠ” fun e -> match e with ... νŒ¨ν„΄μ„ μΆ•μ•½ν•  수 μžˆλŠ” 방법이 μ‘΄μž¬ν•œλ‹€! πŸŽ‰

이것을 "function sugar" λ˜λŠ” **"pattern matching sugar"**라고 λΆ€λ₯Έλ‹€.


βœ… function ν‚€μ›Œλ“œ μ‚¬μš©

OCamlμ—μ„œλŠ” fun e -> match e with을 function ν‚€μ›Œλ“œλ‘œ μΆ•μ•½ν•  수 μžˆλ‹€.

πŸ”Ή κΈ°μ‘΄ μ½”λ“œ:

let f = fun e -> match e with
  | Some x -> x
  | None -> 0

πŸ”Ή function으둜 μΆ•μ•½:

let f = function
  | Some x -> x
  | None -> 0

βœ… function을 μ‚¬μš©ν•˜λ©΄ 인자 이름(e)을 μƒλž΅ν•  수 있음!

βœ… 더 κ°„κ²°ν•˜κ³  가독성이 ν–₯상됨!


βœ… 닀쀑 인자 ν•¨μˆ˜μ—λŠ” function을 λ°”λ‘œ μ‚¬μš©ν•  수 μ—†μŒ

λ§Œμ•½ 닀쀑 μΈμžκ°€ ν•„μš”ν•˜λ‹€λ©΄, function을 λ§ˆμ§€λ§‰ 인자만 μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

πŸ”Ή κΈ°μ‘΄ μ½”λ“œ:

첫 번째 인자λ₯Ό νŒ¨ν„΄ λ§€μΉ­ ν•˜λŠ” 경우

(* int option -> int -> int *)
let f = fun x y -> match x with
  | Some n -> n + y
  | None -> y
;;

f (Some 1) 2;;

두 번째 인자λ₯Ό νŒ¨ν„΄ λ§€μΉ­ ν•˜λŠ” 경우

(* int -> int option -> int *)
let f = fun x y -> match y with
  | Some n -> x + n
  | None -> x
;;

f 1 (Some 2);;

πŸ”Ή function 적용:

두 번째 μΈμžλŠ” 첫 번째 μΈμžκ°€ 맀칭된 경우의 λ§€κ°œλ³€μˆ˜κ°€ 됨

(* int option -> int -> int *)
let f = function
  | Some n -> fun y -> n + y
  (* ( + ) n으둜 μΆ•μ•½ κ°€λŠ₯ *)
  | None -> fun y -> y
  (* id둜 μΆ•μ•½ κ°€λŠ₯ *)
;;

f (Some 1) 2;;

첫 번째 μΈμžλŠ” νŒ¨ν„΄ λ§€μΉ­ μ•žμ— λͺ…μ‹œ

(* int -> int option -> int *)
let f x = function
  | Some n -> n + x
  | None -> x
;;

f 1 (Some 2);;

πŸ“Œ 주의: function ν‚€μ›Œλ“œλŠ” λ§ˆμ§€λ§‰ 인자의 νŒ¨ν„΄ λ§€μΉ­μ—λ§Œ μ‚¬μš©ν•  수 있으며, μ•žμ˜ μΈμžλ“€μ€ κ°œλ³„μ μœΌλ‘œ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.