微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 国家设计模式的功能等效

与国家设计模式相当的功能编程是什么?或者更具体地说,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通过计算线程化所需的模式.

原文地址:https://www.jb51.cc/csharp/95463.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐