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에 대한 여러 가지 - 하하하하!
Reference
이 문제에 관하여(Haskell의 const 함수는 무엇에 쓰일까요...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tak_uchida/articles/2f2402a9f03cbe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)