Haskell int список в строку - PullRequest
       9

Haskell int список в строку

4 голосов
/ 01 декабря 2010

Я хотел бы знать, есть ли простой способ превратить [5,2,10] в "52a". Если дело не только в этом случае, я хочу связать любое число> 9 с соответствующей буквой.

Спасибо заранее.

Ответы [ 2 ]

9 голосов
/ 01 декабря 2010

Вы хотите что-то сделать с каждым элементом списка, чтобы получить новый список. Другими словами, вы хотите применить функцию (которую вы должны будете определить самостоятельно) к каждому элементу. Для этого предназначена функция карты из Prelude.

Для преобразования между целыми числами и отдельными символами вы можете использовать функции chr и ord из модуля Data.Char.

Итак,

map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a'))

- это функция типа [Int] -> String, которая делает то, что вы хотите (хотя проверка ошибок не включена).

7 голосов
/ 01 декабря 2010

Медленнее, но элегантнее:

f = map ((['0'..'9'] ++ ['a'..'z']) !!)

Если ваши числа 0-15, используйте map intToDigit из Data.Char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...