2017-10-22 2 views
-1

목록 구현을 사용하여 Haskell map 함수의 구현을 작성하는 방법이 있습니까?지도 구현 목록 사용하기 haskell

나는 오류가 계속 발생하고 나는 올바른 길에 있다고 생각하지 않습니다. 이것은 내가 가지고있는 것입니다 :

map' :: (a -> b) -> [a] -> [b] 
map' _ [] = [] 
map' xs ys = [ (x, y) | x <- xs | y <- ys ] 

올바른 방향으로 나를 안내 할 도움이나 링크는 크게 감사하겠습니다.

+2

타입 시그니처는'map'이라고하지만 구현시'zip' (중복 케이스 포함)이라고합니다. – pat

+0

'map'의 첫번째 인자는 (타입 서명에 따른) 함수입니다. 'map'은 함수를리스트의 각 요소에 적용하여 결과리스트를 반환합니다). 'zip' 인 2 개의리스트의 요소들로 쌍을 만들고 있습니다. – pat

답변

4

"구현"대신 "이해력"을 의미한다고 생각합니다.

어느 쪽이든,이 작동합니다 :

map' f as = [f a | a <- as] 
map' (* 2) [1..5] 
3

map' f xs = [f x | x <- xs] 

desugars을

map' f xs = xs >>= return . f 
012에 desugars

map' f xs = do x <- xs 
       return $ f x 

Monad 인스턴스의 Functor 인스턴스를 정의하기 위해 잘 알려진 정의 (map'fmap으로 바꾸면 모든 모나드가 펑터이기도 함)입니다.

특히, 목록 이해는 모나드 운영자의 측면에서 map의 정의를 위장한 단순한 버전임을 보여줍니다.