Преобразование списка строк в список кортежей - PullRequest
0 голосов
/ 18 октября 2019

Итак, я до сих пор изучаю Хаскелл. Мне нужно преобразовать список строк в список кортежей, содержащих строки, чтобы они были в паре соответственно.

Примерно так:

["String1 String 2", "String3 String4", "String5 String6"] 

в

[("String1", "String2"), ("String3, String4"), ("String3, String4")].

На самом деле я еще не представил ни одного кода, но понятия не имею, как это должно работать, поэтому я не ожидаю ничего, кроме лишь подсказки, которой я мог бы следовать.

В любом случае, я пытаюсь реализовать это без каких-либо внешних библиотек, поэтому связывание их не будет очень полезным.

Спасибо за любой совет!

1 Ответ

3 голосов
/ 18 октября 2019

Если в списке нет опечаток, это должно быть просто:

strToTuple :: [String] -> [(String, String)]
strToTuple = map toTuple

toTuple :: String -> (String, String)
toTuple st = joinWords $ words st

joinWords :: [a] -> (a, a)
joinWords [x, y] = (x, y)
joinWords _ = error "bad input, list should be length 2"

Вывод:

strToTuple ls
=> [("String1","String2"),("String3","String4"),("String5","String6")]

Примечание,в вашем сообщении вместо "String2" есть "String 2". Я не уверен, является ли это ошибкой или нет, но если это так, это должно сработать

...