c# – 国家设计模式的功能等效
发布时间:2020-12-15 06:28:36 所属栏目:百科 来源:网络整理
导读:与国家设计模式相当的功能编程是什么?或者更具体地说,this Wikipedia example国家设计模式将如何转化为FP? 解决方法 这个模式是使用 State monad的一个例子,一个计算 环境增加了状态的代码. 这是Haskell中的一个实现. 一些助手: import Control.Monad.Tra
与国家设计模式相当的功能编程是什么?或者更具体地说,this Wikipedia example国家设计模式将如何转化为FP?
解决方法
这个模式是使用
State monad的一个例子,一个计算
环境增加了状态的代码. 这是Haskell中的一个实现. 一些助手: import Control.Monad.Trans.State import Control.Monad.IO.Class import Data.Char 程序的两种运行模式 data Mode = A | B 使用此模式进行状态计算的类型,增加了一个计数器. type StateM a = StateT (Int,Mode) IO a 写函数,一个在StateM上下文中的函数, writeName :: String -> StateM () writeName s = do (n,mode) <- get case mode of A -> do liftIO (putStrLn (map toLower s)) put (0,B) B -> do let n' = n + 1 liftIO (putStrLn (map toUpper s)) if n' > 1 then put (n',A) else put (n',B) 运行程序,最初在状态A启动状态计算 main = flip runStateT (0,A) $do writeName "Monday" writeName "Tuesday" writeName "Wednesday" writeName "Thursday" writeName "Saturday" writeName "Sunday" 从上面的代码,主要的输出是: monday TUESDAY WEDNESDAY thursday SATURDAY SUNDAY 请注意,这是一个纯功能的解决方案.此程序中没有可变或破坏性的更新.相反,状态monad通过计算线程化所需的模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |