1
私はハスケルの知識を増やそうと試みて、私は12番目のプロジェクトオイラー問題をState Monadを使って解決しようとしていると思っていました。三角形の数字の作成全体を状態に入れて組み込むことは当時私には意味があるようでした。プロジェクトオイラー12とハスケルの状態モナド
は、ここに私のコードです:
module Main where
import Control.Monad
import Control.Monad.State
type MyState = (Integer, Integer)
s0 = (7, 28)
tick :: State MyState Int
tick = do
(n,o) <- get
let divs = getDivLen (n,o)
if divs >= 500
then do
let n' = n + 1
let o' = o + n'
put (n', o')
tick
else
return divs
getDivLen :: MyState -> Int
getDivLen (n,o) = foldl1 (+) [2 | x <- [1..x], o `mod` x == 0]
where x = round . sqrt $ fromIntegral o
main :: IO()
main = print $ evalState tick s0
コードがコンパイルされ、私は、コンソールに結果6を取得します。私は再帰が起こらないように間違っていることを確かめていません。
ありがとうございます。
うわー、私はとてもうまくいきませんでしたので、私は単純なものを完全に逃しました。それを指摘してくれてありがとう。私は今働いている。 – Bryce