Haskell Списки Maybe Int, конвертируйте каждый элемент в char, затем String - PullRequest
0 голосов
/ 15 марта 2012

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

Например

Допустим, у меня есть списки Maybe Int - [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

Мне нужно создать функцию, которая.

1) Принимает списки Maybe Int s

[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

2) Получает первый список (head?)

[Just 2, Nothing, Just 3]

3) Пройти через каждый элемент в списке - (x:xs)

Just 2, Nothing, Just 3

4) преобразовать Maybe Int в Char - fromEnum

'2', '   ', '3'

5) вернуть полный String, содержащий все символы - (++) = [char] / String

"2   3"

6) переходить к следующему списку до тех пор, пока list = []

[Just 6,Just 3, Just 3]

Таким образом, конечный результат будет выглядеть примерно так:

"2   3"
"633"
"     1"

Я попытался объяснить это как можно лучше, и любые советы / помощь / источники информации будут оценены.

1 Ответ

8 голосов
/ 15 марта 2012

Вы можете использовать функцию maybe, которая позволяет применять функцию к значению в Just со значением по умолчанию, если оно было Nothing, поэтому для преобразования Maybe Int в однозначную Char с пробелом по умолчанию, используйте maybe ' ' intToDigit.(toEnum будет использовать значение ASCII, которое здесь не то, что вам нужно).

Затем, чтобы применить это в списке списков, вы просто дважды используете map:

> import Data.Char
> map (map $ maybe ' ' intToDigit) [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3], [Nothing, Nothing, Just 1]]
["2 3","633","  1"]

Поскольку строка - это просто список символов, результатом является список строк.

...