(a,a)
튜플 목록을 a
의 목록으로 변환하고 싶습니다. 이것은 내가 무엇을 가지고 지금까지튜플 목록을 haskell의 일반 목록으로 변환하는 방법은 무엇입니까?
map (\(x,y) -> [x,y]) [(1,4),(2,5)]
> [[1,4],[2,5]]
하지만 내가 원하는 것은
> [1,4,2,5]
(a,a)
튜플 목록을 a
의 목록으로 변환하고 싶습니다. 이것은 내가 무엇을 가지고 지금까지튜플 목록을 haskell의 일반 목록으로 변환하는 방법은 무엇입니까?
map (\(x,y) -> [x,y]) [(1,4),(2,5)]
> [[1,4],[2,5]]
하지만 내가 원하는 것은
> [1,4,2,5]
당신이 취할 필요가있는 유일한 추가 단계가 concat
이다 enate와 목록 :
concat (map (\(x,y) -> [x,y]) [(1,4),(2,5)])
여기 concat :: [[a]] -> [a]
은 목록의 목록을 단일 목록으로 연결합니다. concatMap :: (a -> [b]) -> [a] -> [b]
:
concatMap (\(x,y) -> [x,y]) [(1,4),(2,5)]
또한 list comprehension를 사용하고 쓸 수가 좋아 : data
이
[z | (x,y) <- data, z <- [x,y]]
입니다 같은 구조물 이후
은 더 편리하게 기능이 종종 발생 귀하의 초기 데이터 목록.
당신이 설명하는 것은 일반적인 하스켈 패턴입니다!
그것은리스트가 될 필요가 없습니다,
,이 기능의 유형은
[a] -> (a -> [a]) -> [a]
이의이
m
컨테이너 유형입니다
a
의
m a
의 컨테이너를 부르 자 할 것이다. 이 경우, 우리는
m a -> (a -> m a) -> m a
이 기능은 >>=
인 것이다! 중위 연산자로 사용합니다. 컨테이너가 하나 개의 층으로 2 층 "붕괴"를 지원하는
Prelude> [(1,4),(2,5)] >>= \(x,y) -> [x,y]
[1,4,2,5]
.... 이것은 모나드입니다.
a >>= f
은 Willem Van Onsem에서 제안한대로 concatMap f a
과 같습니다.
호기심에서 벗어났습니다. 어떻게''='? –
''= '은 보통 [배웁니다 하스켈] (http://www.learnyouahaskell.com/a-fistful-of-monads)에 따라 _bind_로 발음됩니다. 나는 이것을 _stuff into_-operator로 생각하는 경향이있다. – Teodor
나는 목록의 이해력이 더 좋기 때문에 이해하기가 더 쉽습니다.감사합니다 –
@DavidAndvett : 프랑스는 이렇게 말합니다 : "* des goûts et des couleurs, ne discute pas *", 그래서 당연히 당신에게 달려 있습니다 :) –