加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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通过计算线程化所需的模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读