ハスケルでやりたいことについて簡単な質問があります。私が基本的に達成しようとしているのは、1から特定の値yまでの整数のリストを作成することです。[1..y]のように、このリストを各番号の間にスペースを入れて印刷します
私が[1..8]を持っているとしましょう
私の希望する出力は( "_"はスペースを表します):
_1_2_3_4_5_6_7_8
いろいろなことで少し遊んだことがありますが、運がありません
これは基本的にIvがこれまでに得たものです
printLst :: [Int] -> String
printLst (x:xs) = " " ++ putStr (show x) >> printLst xs
私はこれに対する解決策を見つけるためにウェブを検索してきましたが、これを行うのに役立つものは何も見つかりませんでした。
ヘルプは大歓迎です
まず、変換関数を定義Int
するとString
、その結果にスペースを付加します。
\x -> ' ' : show x
これをリストにマッピングします。
> map (\x -> ' ' : show x) [1..8]
[" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"]
ここで、すべての文字列を1つに連結する必要があります。
> concat (map (\x -> ' ' : show x) [1..8])
" 1 2 3 4 5 6 7 8"
これは、次のconcatMap
関数を使用して簡略化できます。
> concatMap (\x -> ' ':show x) [1..8]
" 1 2 3 4 5 6 7 8"
これは、Monad
リストのインスタンスの基礎を形成します。
> [1..8] >>= (\x -> ' ' : show x)
" 1 2 3 4 5 6 7 8"
またはさらに簡単に言えば、関数合成を使用します
> [1..8] >>= (' ' :) . show
" 1 2 3 4 5 6 7 8"
最終的な文字列を取得したら、それを印刷することを心配できます。
> putStrLn $ [1..8] >>= (' ' :) . show
1 2 3 4 5 6 7 8
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加