1
在試圖增加我的Haskell知識,我想我會嘗試並得到解決使用狀態Monad的第12個項目歐拉問題。對於我來說,在整個三角形編號創建時加入狀態似乎是有道理的。項目歐拉12與哈斯克爾國家Monad
這裏是我的代碼:
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 2012-02-10 17:35:46