왠지 Elm 코드는 인수서가 없을 정도로 멋지다.

취미로 Elm 만져서, 잘 모르지만 어쩐지 움직이는 것 같은 느낌으로 하고 있는, 함수형 아마추어의 다이나믹 HTML 코더인 나 시선의 내용이므로, 별로 깊은 내용이 아닌 것을 미리 양해 바랍니다

그런데 본제에 들어가지만,
JS의 이런 코드가 있다고 가정합니다.
const args = [1, 2]
const func = arg => arg * 2
args.map(func) // [2, 4]

이것을 Elm으로 작성하면 이렇게됩니다.
args = [1, 2]
func arg = arg * 2
List.map func args -- [2, 4]

JS에서도 인수 1개의 경우는 () 사용하지 않아도 함수 정의할 수 있습니다만,
Elm이라면 몇 개라도 () 사용하지 않으며 함수 적용 시에도 사용하지 않습니다.
그럼 어디까지가 그 함수의 단락이라고 판별해, 라는 이야기는,
분명히 Elm 코드는 () 사용하지 않을 정도로 잘 생긴 것 같습니다.을 참조하십시오.

다음에 JS로 이런 느낌으로,
const args = [1, 2]
const func1 = arg => arg * 2
const func2 = arg => arg + 2
args.map(arg => func1(func2(arg))) // [6, 8]

익명 함수를 사용하여 함수를 합성하는 것은 Elm이라고 이렇게 쓸 수 있습니다.
args = [1, 2]
func1 arg = arg * 2
func2 arg = arg + 2
List.map (\arg -> func1 <| func2 arg) args -- [6, 8]

(<|의 경우 위 기사에 있습니다.)\은 익명 함수의 문법입니다. func arg = argfunc = \arg -> arg 은 동일합니다.
다시 말하면, 이렇게는 쓸 수 있습니다만, 숙련된 Elmers는 이렇게 쓰지 않는 것 같네요.
아무래도 함수 합성에는 나란히 엄선이 있는 것 같고, 그것을 위한 스페셜한 함수가 준비되어 있습니다.

(<<) : (b -> c) -> (a -> b) -> a -> c



잘 모르는 기호의 함수 시리즈. 그리고 이것도 중치 함수. 어쩌면 기호로 함수 정의하면 중치할 수 있는 것 같다.

에서 이것은 "임의 유형 b를 인수에 대해 임의 유형 c를 반환하는 함수"와 "임의 유형 a를 인수에 대해 동일한 유형 b를 반환하는 함수"와 "동일한 유형 a"를 인수에 대해 "같은 유형 c"를 반환하는 함수입니다. 입니다. (별로 자세하지는 않지만 형의 견해도 위 기사 로 조금 설명하고 있습니다.)

말하는 의미는 잘 모르겠지만, 우선 사용해 보면,(<<) func1 func2 1(\arg -> func1 <| func2 arg) 1 이 될 것 같고 6 이 반환됩니다.

이것을 중치하고 싶습니다만, 인수가 3개 있으면 어디에 중치하면 좋을까라는 느낌입니다만,
함수의 부분 적용이라고 하는 녀석이 있는 것 같고, 이 함수로 말하면, b -> ca -> b 의 함수만 건네주면 a -> c 의 함수가 반환해 오는 것 같다.

func1 << func2\arg -> func1 <| func2 arg 과 같습니다.
방금 map에 건네준 함수와 같은 형태군요. 그래서 이렇게 쓸 수 있습니다.
args = [1, 2]
func1 arg = arg * 2
func2 arg = arg + 2
List.map (func1 << func2) args -- [6, 8]

인수 사라졌다! 음, 이상하다. 하지만 뭔가 간단하고 좋을지도.
덧붙여서 이 인수 지울 수 있는 시리즈는 그 밖에도 있고, 잘 보이는 녀석을 소개합니다.

(>>) : (a -> b) -> (b -> c) -> a -> c



역판.List.map (func2 >> func1) args 라고 쓸 수 있다.

identity : a -> a



인수를 그대로 돌려주고 좋을 때 사용한다. JS에서
const args = [1, 2]
args.map(arg => arg) // [1, 2]

이것은 Elm이지만,
args = [1, 2]
List.map (\arg -> arg) args -- [1, 2]

identity 사용하는 사람이 다니고 싶습니다.
args = [1, 2]
List.map identity args -- [1, 2]

always : a -> b -> a



인수를 사용하지 않고 좋을 때 사용한다. JS에서
const args = [1, 2]
args.map(arg => 0) // [0, 0]

이것은 Elm이지만,
args = [1, 2]
List.map (\arg -> 0) args -- [0, 0]

always 사용하는 사람이 다니고 싶습니다.
args = [1, 2]
List.map (always 0) args -- [0, 0]

요약


<<<| , 즉 합성과 적용은 전혀 다른 것 같지만, 나에게는 무엇이 다른지 잘 모르는 곳에, 내 두뇌의 한계를 느끼고 있습니다만,
우선 모테는 아무래도 좋다.

좋은 웹페이지 즐겨찾기