2

私はHaskellの完全な初心者です。コードをまったく機能させることができず、修正方法もわかりません。私は助けが必要です:)誰かが私の問題を解決するために私がどこを見る必要があるかについての考えを持っているなら、私は正しい方向へのアイデアとナッジのために非常に素晴らしいでしょう.

リストが終了するまで繰り返される C# string.Format のタイプを作成しようとしています。リストはユーザー入力によって作成され、リストが完了するまで文字列を繰り返すだけです。

    test :: Integer -> String
    let list_n [0..k]
    test k = putStrLn (r * r) | r <- list_n   --My idea here is that i am forcing 
    --the entire list onto r and making it repeated as long as there is more in the
    --list, But im not even sure that is possible :(

誰でもこれを行う方法についてより良いアイデアを持っていますか? すべての結果を行ではなく行に表示したいので、イテレーションを作成しようとしていますが、HaskeLL では簡単に言うことができます:/

4

3 に答える 3

5

ここに2つの提案があります。1つは投稿したコードと一致させようとし、もう1つは投稿した英語と一致させようとします。これは主に構文に関する質問のようですので、「チュートリアルを読む」以外に、これに沿った意味のある説明がたくさんあるかどうかはわかりません。

-- match the code
test :: Int -> String
test k = concat [show (r * r) | r <- [0..k]]

-- match the English
test :: Int -> String -> String
test k s = concat [s | r <- [0..k]]
于 2012-09-06T18:00:40.683 に答える
3

これが命令型に近いものです:

import Control.Monad (forM_)

test :: Int -> IO ()
test n = forM_ [0..n] (\i -> putStrLn $ show $ i*i)

これは大まかに次のように解釈されます:「[0..n]の各iについて、実行...」

于 2012-09-06T21:27:07.137 に答える
3

たぶん、与えられた文字列をn何回も印刷するつもりで、各文字列で改行を開始したいようで、リスト内包表記を使用したいようです。これは次のようになります。

test :: Integer -> String -> IO ()
test n xs = sequence_ [putStrLn xs| i<- [1..n]]

しかし、計算した整数を捨てることになりますi。したほうがいいよ

test n xs = replicateM_ n (putStrLn xs)

を与える

Main> test 3 "Hello"
Hello
Hello
Hello

おそらく、数値自体を文字列として表示するつもりだったのでしょう。

test n = sequence_ [putStrLn (show i)| i<- [1..n]]

しかし、繰り返しますが、そうする方が良いでしょう

test n = mapM_ putStrLn (map show [1..n])

この二つが与える

Main> test 3
1
2
3

しかし、主にあなたがしなければならないことは、最初に優れた紹介テキストに従うことです. Learn You a Haskell for Great Good をお勧めします。

質問を編集して、何を望んでいるかを明確にすると、非常に役立ちます。どのような出力が必要でしたか?

于 2012-09-07T15:34:01.013 に答える