tag:blogger.com,1999:blog-4013660499115623904.post1277372588249959502..comments2023-04-06T22:51:02.758+08:00Comments on 星之一角: Reader Monad (3)Lin Jen-Shin (godfat)http://www.blogger.com/profile/04471393622959484230noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-4013660499115623904.post-30287055858066206402009-11-09T11:30:50.224+08:002009-11-09T11:30:50.224+08:00噢,怪不得叫 local, 還真是直覺? XD
希望這次能一鼓作氣讀完大部份,
不然一放著,之前讀過...噢,怪不得叫 local, 還真是直覺? XD<br />希望這次能一鼓作氣讀完大部份,<br />不然一放著,之前讀過的東西真的忘記不少 @@"<br /><br />晚點就拜讀 :DLin Jen-Shin (godfat)https://www.blogger.com/profile/04471393622959484230noreply@blogger.comtag:blogger.com,1999:blog-4013660499115623904.post-45542295692327620972009-11-08T17:35:29.731+08:002009-11-08T17:35:29.731+08:00我在寫 monad 簡介唷。歡迎給意見。
http://www.iis.sinica.edu.tw...我在寫 monad 簡介唷。歡迎給意見。<br /><br />http://www.iis.sinica.edu.tw/~scm/ncs/2009/11/a-monad-primer-1/<br /><br />下次應該就會用 reader monad 當例子吧。scmhttp://www.iis.sinica.edu.tw/~scm/ncsnoreply@blogger.comtag:blogger.com,1999:blog-4013660499115623904.post-91705766664634881622009-11-08T17:34:02.820+08:002009-11-08T17:34:02.820+08:00> 原本的 Env 只會被一直傳下去,似乎沒有去動到他的機會?
可以的唷,但只能「往下」動。...> 原本的 Env 只會被一直傳下去,似乎沒有去動到他的機會?<br /><br />可以的唷,但只能「往下」動。其實這就是你後面提到的 local 的功能。local 的 type 是(e -> e) -> m a -> m a, 其中 e -> e 是改變環境用的函數。在這個程式中:<br /><br />comp1 >>= \a -><br />local f comp2 >= \b -> <br />comp 3<br /><br />如果環境是 e, comp1 在 e 的環境下執行。 comp2 收到的環境則是 f e. 而 comp3 的環境又是 e. 這是和 state monad 的不同處, 後者會把 state 串起來。這也是為什麼 reader monad 是 e -> a, state monad 卻得是 s -> (a, s) -- 後者需要把新的 state 傳回來,才能繼續串下去,而新的環境用過就可以丟掉了。<br /><br />Reader monad 很適合在寫 interpreter 的時候傳環境用。scmhttp://www.iis.sinica.edu.tw/~scm/ncsnoreply@blogger.com