Haskell의 const 함수는 무엇에 쓰일까요...

Haskell의 학습을 추진하면서 const 함수가 나올 때의 의문점.
"Haskell의 const 함수는 무엇에 쓰일까..."
피로를 풀기 위해 조사를 진행했다.

const 함수


먼저 const 함수식의 유형을 보십시오. 아래와 같습니다.
Prelude> :t const
const :: a -> b -> a
처리 내용은 두 개의 매개 변수를 받아들이고 첫 번째 매개 변수의 처리를 되돌려주는 것이다.
const 함수에 숫자, 문자열, 함수를 전달하는 것은 다음과 같다.(flip 함수를 사용해도 같은 조작을 할 수 있다.)
Prelude> const 1 2
1
Prelude> const "Hello" "World"
"Hello"
는 항상 첫 번째 값을 되돌려주기 때문에 id 함수와 조합하여 항상 두 번째 값을 되돌려주는 함수를 정의할 수 있다.
Prelude> const id 1 2
2
Prelude> ((const id) 1) 2 --結合法則をわかりやすく記述
2
id 함수도 마찬가지였지만 const 함수는 처음 봤을 때 무엇을 위해 존재했는지 알 수 없었다.(id 함수에 대한 보도여기.

const 함수의 특징


const 함수의 중요성과 특수성은 가 첫 번째 파라미터를 되돌려야 하지만 값을 얻으려면 두 번째 파라미터 의 성질을 교부해야 한다는 데 있다.
Prelude> foo = const 1
Prelude> :t foo
foo :: Num a => b -> a
Prelude> foo 2
1
이하는 코드에 따라 사용 장소를 확인할 것이다.

const 함수 사용소


map


어느 목록이 전달되든지 정수치로 변환되는 함수를 정의합니다.
Prelude> foo = const "foo"
Prelude> map foo [1, 2, 3]
["foo","foo","foo"]

zipWith


zipWith 함수와 결합하면 두 번째 목록 크기에 맞는 첫 번째 목록을 얻을 수 있습니다.
Prelude> zipWith const [1, 2, 3] [4, 5]
[1,2]
const 함수와 id 함수를 결합하면 첫 번째 목록의 크기와 반대되는 두 번째 목록을 얻을 수 있다.
Prelude> zipWith (const id) [1, 2] [3, 4, 5]
[3,4]

Monad의 >> 연산자


Monad의 > 연산자는 Monad형의 유형 제한을 제외하고 const 함수와 표현식 유형이 비슷합니다.
Prelude> :t (>>)
(>>) :: Monad m => m a -> m b -> m b
const 함수를 사용하여 로 재정의할 수 있습니다.
Prelude> foo a b = a >>= const b
Prelude> :t foo
foo :: Monad m => m b1 -> m b2 -> m b2
즉 연산자를 사용하는 곳에서const로 대체할 수 있다는 것이다.
※ 물론 >> 연산자를 직접 사용하는 것이 좋습니다.
Prelude> putStrLn "hello" >> putStrLn "world"
hello
world
Prelude> putStrLn "hello" >>= const (putStrLn "world") 
hello
world

최후


const 함수이지만, 기본적으로 불필요한 값을 버리고 싶을 때 (예를 들어 Unit형 반환 함수나 상기 맵의 사용 예와 같이) 유용할 수 있습니다.
다른 것은 학식자가 const 함수의 사용소와 편의성 등을 평어로 알려주면 좋겠다.

운영 환경


OS:Debian GNU/Linux 10 (buster)GHC:The Glorious Glasgow Haskell Compilation System, version 8.4.4

참고 자료


  • What's the point of 'const' in the Haskell Prelude? - Stack Overflow

  • const에 대한 여러 가지 - 하하하하!
  • 좋은 웹페이지 즐겨찾기