我有一个函数链接状态单子
step :: Int -> State Int Int
step n = get >>= \x -> put (x `div` n) >> return (x `mod` n)
λ> runState (step 25) 41
(16,1)
如何运行的step
个序列,与n
不同的值,并使用来自最后一步的状态下每一步?
所以示例中的步骤将是如下
一步一个产生(16,1)
然后我想用作输入我与n = 10
下一步应该产生(6, 2)
。第一步添加1,第一步添加16,新建n。
n = 25 gives (16,1) then
n = 10 gives (6,2) then
n = 5 gives (1,3) then
n = 1 gives (0,4)
我知道在这里使用State
可能不正确;但我试图用它来学习。
可能的目标是与状态monad一起实现此功能。
greedy :: Double -> Int
greedy owed = snd $ foldl go (pennies,0) [25, 10, 5, 1]
where
pennies = floor . (*100) $ owed
go (remaining,counter) coin = (remaining',counter')
where
remaining' = remaining `mod` coin
counter' = counter + remaining `div` coin
你说的是不是'一步其他任何1 >>第2步>>第3步? – Cubic
@Cubic,我修改了我的问题。 – matthias