gpt4 book ai didi

haskell - 理解 State Monad 中的 state 参数

转载 作者:行者123 更新时间:2023-12-03 22:15:59 29 4
gpt4 key购买 nike

我非常努力地想围绕 State Monad,但我不明白以下内容:

鉴于 return 的实现和 (>>=) ,当你说 State $ \s ->.... ,在哪里s来自?我的意思是,当你开始表演时 >>= ... >>= ,这是否意味着您必须在链的开头某处以某种方式提供该初始参数?

newtype State s a=State { runState::s->(a,s) }

instance Monad (State s) where
return a=State $ \s->(a,s)
(>>=) m g=State $ \s -> let (a,s')= runState m s in
runState (g a) s'

(>>=)你说 State $ \s -> runState m s ,我不知道什么时候是初始 (\s -> ...) argument (带有 REAL argument )叫?

有人可以解释一下吗?

稍后编辑 :

有人可以告诉我如何将 initial设置状态,假设它是否需要使用 getLine 获取值?
main::IO()
main=do
argument<-getLine
--how do i set initial state with argument?
m >> f1 >> f2 >> f3

最佳答案

when you say State $ \s ->...., where does s come from ?



它将来自调用,当 runState将初始状态值提供给 state-monadic 值,以运行它描述的组合计算:
st = do { x <- get ; return (x+1) }

x = runState st 0 -- x is (1,0)

我还感觉到您的另一个可能的误解:您写道:“最初的 (\s -> ...) argument 何时被调用?”没有“初始” lambda:所有 lambda 都嵌套在里面!
do { a <- as; b <- bs; c <- foo b; return c }

翻译为
as >>= (\a -> bs >>= (\b -> foo b >>= (\c -> return c)))

所以它不是“初始”,而是一个组合的全封闭 lambda,用初始状态调用!

然后它会调用
let (a,s1) = runState as s0

等与“初始” asdo堵塞。

关于haskell - 理解 State Monad 中的 state 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221794/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com