람다 식: fun 키워드
람다 식: fun 키워드
F#에서 **람다 식(lambda expression)**은 이름 없이 정의하는 익명 함수예요. fun 키워드로 시작해서 파라미터 목록과 화살표(->), 그리고 함수 본문을 차례로 적으면 되는데, 특히 목록이나 컬렉션을 다룰 때 별도 함수를 정의하는 번거로움 없이 간단히 함수 값을 넘겨주기에 아주 유용합니다. 이 문서에서는 람다 식의 문법과 fun 키워드, 그리고 _.Property 같은 간단 표기법까지 차근차근 살펴볼게요.
본문
Syntax (문법)
람다 식의 기본 문법은 다음과 같아요.
fun parameter-list -> expression
아니면 _.Property 간단 표기법을 쓸 수도 있어요.
_.
이 경우 fun, parameter-list, 그리고 람다 화살표(->)는 생략되고, _.는 expression의 일부가 되며, 여기서 _가 파라미터 기호를 대신합니다.
아래 두 코드는 서로 같은 의미예요.
(fun x -> x.Property)
_.Property
Remarks (설명)
parameter-list는 보통 파라미터의 이름과, 필요하면 타입으로 이루어집니다. 더 일반적으로는 어떤 F# 패턴이든 parameter-list를 구성할 수 있어요. 가능한 패턴의 전체 목록은 Pattern Matching을 참고하세요. 유효한 파라미터 목록의 예는 다음과 같아요.
// Lambda expressions with parameter lists.
fun a b c -> ...
fun (a: int) b c -> ...
fun (a : int) (b : string) (c:float) ->
// A lambda expression with a tuple pattern.
fun (a, b) -> …
// A lambda expression with a cons pattern.
// (note that this will generate an incomplete pattern match warning)
fun (head :: tail) ->
// A lambda expression with a list pattern.
// (note that this will generate an incomplete pattern match warning)
fun [_; rest] ->
expression은 함수의 본문이며, 그 마지막 식이 반환 값을 만들어냅니다. 유효한 람다 식의 예는 다음과 같아요.
fun x -> x + 1
fun a b c -> printfn "%A %A %A" a b c
fun (a: int) (b: int) (c: int) -> a + b * c
fun x y -> let swap (a, b) = (b, a) in swap (x, y)
Using Lambda Expressions (람다 식 사용하기)
람다 식은 목록이나 다른 컬렉션에 연산을 적용하고 싶은데 함수를 따로 정의하는 수고를 피하고 싶을 때 특히 유용해요. F# 라이브러리 함수 중 상당수가 함수 값을 인자로 받는데, 그런 경우 람다 식을 쓰면 아주 편리하답니다. 아래 코드는 람다 식을 목록의 요소에 적용하는 예시예요. 이 익명 함수는 요소가 지정된 문자로 끝나는 텍스트인지 확인하는 역할을 합니다.
let fullNotation = [ "a"; "ab"; "abc" ] |> List.find ( fun text -> text.EndsWith("c") )
printfn "%A" fullNotation // Output: "abc"
let shorthandNotation = [ "a"; "ab"; "abc" ] |> List.find ( _.EndsWith("b") )
printfn "%A" shorthandNotation // Output: "ab"
이 코드 조각은 fun 키워드를 쓰는 방식과 _.Property 간단 표기법, 두 가지 표기법을 모두 보여줍니다.