새소식

Programming/Elm

[Elm] 함수 (Function)

  • -

익명 함수

\x -> x + 1

\x y -> x + y

\x y -> [x, 1, y, 2]

백슬래시와 화살표 사이에 함수의 인자들, 화살표 오른편에는 함수의 내용

활용은 다음과 같이 한다.

> (\x y -> x * y) 2 3
6 : number

x와 y를 곱하는 익명 함수에 x 값에 2, y 값에 3을 대입하여 결과 6이 된다.

 

이름 정의된 함수

add : Int -> Int -> Int
add x y =
    x + y

인자로 받는 Type들과 결과 Type을 첫줄에 기입한다. 이를 Elm 에서 시그니처라고 불린다.

다음 줄 에 함수의 내용을 기입한다.

 

다른 언어와 다르게 공백 만으로 함수의 인자를 전달한다.

풀어서 쓰면 아래와 같다.

 

Kotlin

add(2, 3)

Elm

((add 2) 3)


add 2 
-- 중간 함수
-- 이 중간 함수를 add2 라 명명
-- 함수 내용을 보자면 아래와 같다.


add2 : Int -> Int -> Int
add2 2 y =
    2 + y


add2 3
5 : Int

이름이 정의된 함수를 다음과 같이 활용할 수 있다.

> add 2 3
5 : Int

> add 2 3 == 5
True : Bool

> add (add 3 4) 5
12 : Int

 

부분 적용

모든 함수는 하나의 인자만을 받기 때문에 add 같은 함수를 호출할 때

아래와 같이 Int -> Int의 시그니처를 가질 수 있다.

add2 = add 2

add2 3
5 : Int

 

타입 변수

흔히 쓰이는 문자열 리스트의 indexOf 함수를 시그니처로 표현하면 다음과 같다.

indexOf: String -> List String -> Int

문자열 리스트이 아닌 정수 리스트를 가진 상황에서 위 함수를 재활용하고 싶을 땐 타입 변수(Stand-In) 기능으로

Generic 함수로 만들 수 있다.

indexOf: a -> List a -> Int

a Type이 String, Int, Boolean 등 여러가지 Type을 인자로 받을 수 있다.

 

 

인자로 전달되는 함수

타 언어의 람다 표현식과 같다.

예시로 정수 리스트를 문자열 리스트로 변환하는 map 함수를 시그너처로 표현하면 다음과 같다.

map : (Int -> String) -> List Int -> List String
  • 첫번 째 인자로 함수를 받음
  • 정수 리스트를 인자로 받음
  • 최종적으로 정수 리스트를 문자열 리스트로 반환
> map toString [1, 2, 3]
["1","2","3"] : List String

'Programming > Elm' 카테고리의 다른 글

[Elm] 함수 파이프 연산자 (Pipe Operator)  (0) 2020.11.24
[Elm] 유니온 타입 (Union Type)  (0) 2020.11.24
[Elm] 변수 (Variable)  (0) 2020.11.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.