Haskell의 id 함수는 도대체 어디에 쓰일까요?
"Haskell의 id 함수는 무엇에 쓰입니까?
피로를 풀기 위해 조사를 진행했다.
id 함수
당분간 id 함수의 식의 유형을 보면 다음과 같다.
Prelude> :t id
id :: a -> a
형 변수 a를 사용했기 때문에 다상형, id는 다관계수일 수 있다.그러나 처리 내용은 하나의 매개 변수를 받아들여 매개 변수의 처리를 직접 되돌려주는 것이다.
숫자와 문자열을 id 함수에 건네주면 다음과 같습니다.
Prelude> id 1
1
Prelude> id "Hello World"
"Hello World"
처음 봤을 때 무엇을 위해 존재했는지 알 수 없는 함수.id 함수의 존재 의미
id 함수에 대해 참조자 Stackoverflow는 다음과 같은 설명이 있습니다.
It's useful as an argument to higher order functions (functions which take functions as arguments), where you want some particular value left unchanged.
특정 값을 보존하려면 고급 함수 (함수를 매개 변수로 하는 함수) 의 매개 변수로 편리하다라는 뜻이다.
고급함수를 변경하지 않고 전달하려는 경우 사용할 수 있느냐는 것이다.
이 설명도 이해하기 어려울지도 몰라...
다음은 코드를 바탕으로 사용 장소를 살펴보겠습니다.
id 함수 사용소
zipWith
zipWith 함수를 사용할 때 id 함수를 사용해 보십시오.
만약 첫 번째 수조 [a]가 하나의 매개 변수를 받아들이는 함수의 수조라면 id 함수를 사용할 수 있습니다.
Prelude> zipWith id [(+2), succ, id] [3, 2, 1]
[5,3,1]
foldr
folddr 함수를 사용할 때 id 함수를 사용해 보십시오.
첫 번째 매개변수.전달 함수(함수 합성을 하는 함수)를 통해 id 함수와 파라미터를 받아들이는 함수 목록을 전달하여 일부 적응된 함수를 만들 수 있습니다.
부분적으로 적응된 것이기 때문에 전달에 필요한 마지막 매개 변수(여기는 7에 맡긴 것)를 통해 연산 결과를 나타낸다.
Prelude> :t foldr (.) id [(+2), (*2)]
foldr (.) id [(+2), (*2)] :: Num b => b -> b
Prelude> foldr (.) id [(+2), (*2)] 7
16
Monoid
함수의 단일 실례 성명은mempty(단위원)로 사용할 수 있습니다.
mempty는 x<>id=x(그리고 id<>x=x)를 의미한다.
따라서 정수의 곱셈은 1이고 정수의 덧셈은 0이다.
instance Monoid (a -> a) where
mempty = id
f `mappend` g = (f . g)
최후
원래 id 함수는 항등함수(Identity function)의 약자로 수학에서 가져온 개념이다.
따라서 id함수의 유용성을 더욱 깊이 이해하기 위해 수학에서 항등함수의 다양한 용도를 배우면 된다고 생각합니다.
운영 환경
OS:Debian GNU/Linux 10 (buster)GHC:The Glorious Glasgow Haskell Compilation System, version 8.4.4
참고 자료
Uses for Haskell id function - Stack Overflow
"id" In Haskell? - Functional Programming | Dream.In.Code
[문제] 수학: 항등함수 | 온라인 무료 학원
Reference
이 문제에 관하여(Haskell의 id 함수는 도대체 어디에 쓰일까요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tak_uchida/articles/45f5a0f18c3c9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)