0

頭を悩ませている Haskell の問題について助けが必要です。私が望むことを達成するために必要な手順 (ちょっと) は知っていますが、それを行う方法が本当にわかりません。

例えば

のリストがあるとしますMaybe Int-[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

その関数を作成する必要があります。

Maybe Int1)のリストを取る

[[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に変換CharfromEnum

'2', '   ', '3'

5)Stringすべての文字を含む完全なものを返します -(++) = [char] / String

"2   3"

6) リスト = になるまで、次のリストに移動します。[]

[Just 6,Just 3, Just 3]

したがって、最終結果は次のようなものになり、別の行に出力されます。

"2   3"
"633"
"     1"

私はそれを可能な限り説明しようとしましたが、ヒント/ヘルプ/情報源をいただければ幸いです.

4

1 に答える 1

9

関数を使用すると、デフォルトの場合はデフォルトmaybeでaの値に関数を適用できるため、デフォルトでスペースを使用してaを1桁に変換するには、を使用します。(ASCII値を使用しますが、これはここで必要なものではありません)。JustNothingMaybe IntCharmaybe ' ' intToDigittoEnum

次に、リストのリスト内でそれを適用するには、次のmap2回だけ使用します。

> 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"]

文字列は単なる文字のリストであるため、結果は文字列のリストになります。

于 2012-03-15T09:40:20.710 に答える