class Cycle
def cycle(*args)
args[((@_cycles ||= Hash.new(-1))[args.hash] += 1) % args.size]
end
end
More beautiful code plees?
Name:
Anonymous2009-08-27 16:53
import Data.Map
import Data.IORef
newCycle =
do state <- newIORef empty
let memoCycle args =
do modifyIORef state $ alter (Just . maybe (cycle args) tail) args
fmap (head . (!args)) $ readIORef state
return memoCycle