У меня есть [("m","n"),("p","q"),("r","s")]
. Как я могу преобразовать его в [["m","n"],["p","q"],["r","s"]]
?Конвертировать список кортежей в список списков Haskell
Может ли кто-нибудь мне помочь? Благодарю.
У меня есть [("m","n"),("p","q"),("r","s")]
. Как я могу преобразовать его в [["m","n"],["p","q"],["r","s"]]
?Конвертировать список кортежей в список списков Haskell
Может ли кто-нибудь мне помочь? Благодарю.
Написать одну функцию, чтобы преобразовать пару в список:
pairToList :: (a, a) -> [a]
pairToList (x,y) = [x,y]
Тогда вы только должны map
pairToList
:
tuplesToList :: [(a,a)] -> [[a]]
tuplesToList = map pairToList
Или в одной строке:
map (\(x,y) -> [x,y])
List comprehension версия:
[[x,y] | (x,y) <- [("m","n"),("p","q"),("r","s")]]
Использование lens
вы можете сделать это сжато для произвольной длиной однородных кортежей:
import Control.Lens
map (^..each) [("m","n"),("p","q"),("r","s")] -- [["m","n"],["p","q"],["r","s"]]
map (^..each) [(1, 2, 3)] -- [[1, 2, 3]]
Примечания хотя, что lens
библиотеки является сложной и довольно начинающим недружелюбно.
Новый вопрос - что такое \ for? –
@AbhijitSarkar Это просто синтаксис для определения лямбда. – Ankur
@AbhijitSarkar Новая версия должна быть более полезной. – Zeta