私はhaskellを学び始めたばかりであり、それは私が慣れているもの(Cスタイルの言語)とは大きく異なる考え方です。
とにかく、私が取り組んでいる1つの問題については、ユーザー入力を受け取る必要があります。それは形で来るでしょう
2
10
20
例えば。フォーマットは最初の行で、その後の行数を示します。私の最初の考えは、最初の行を読んでから、その回数だけループを実行することでした。これはHaskellです!私の知る限り、ループは不可能です。
次の考えは、入力の最初の行を使用して、リストに続く他のn個の数字を入力することでした。しかし、これをどのように行うかはわかりません。私がここにいるのは、それを理解するために何を検索するのかさえわからないからです。
これを行うための面倒な方法を教えてくれてありがとう。今のところ大変ですが、「悟りを開いた」人から絶賛されているので、自分で言語を学ぶのも悪くないと思います。
これは1回だけ正常に実行されるコードですが、最初の行に続く2行目からn行目ごとに1回実行する必要があります。
l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
do b <- readLn
print (a b)
(また、コードに他に改善できる点があるかどうかを聞きたいのですが、この特定のケースでは、可能な限り少ない文字数で問題を解決するための競争です。これ以上は取得したくありません。他の人が同じ問題の答えを検索しようとしている場合に固有です。)
編集:みんなの答えをありがとう。私は最終的に私がそれを望んでいたように振る舞う何かを手に入れました。後世のために、そのためのコードを以下に示します。悲しいことに、それが飛んでいる色でテストケースに合格したにもかかわらず、彼らがそれをテストした実際のデータは異なっていました、そして彼らが私に言うのは私が「間違った答え」を得たということだけです。このコードは「機能」しますが、正しい答えは得られません。
import Control.Monad
l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
do b <- readLn
s <- replicateM b readLn
mapM_ print [a c | c <- s]