shi*_*mer 4 haskell pattern-matching
作为Haskell的初学者,我发现很难在视觉上识别出一些模式匹配的例子.
似乎在let绑定中有时模式匹配发生在lhs上,当调用一个函数并且值绑定到rhs上的方程中的变量时,如下面的代码示例所示:
let boot x y z = x * y + z in boot 3 4 2
Run Code Online (Sandbox Code Playgroud)
然而,有时函数将在rhs中运行,并且该函数的返回值将被绑定到等式的lhs中的值,如"了解你的Haskell"中State Monad的定义:
instance Monad (State s) where
return x = State $ \s -> (x,s)
(State h) >>= f = State $ \s -> let (a, newState) = h s
(State g) = f a
in g newState
Run Code Online (Sandbox Code Playgroud)
函数h使用lambda参数s运行,返回值绑定到(a,newState).
对于一个新的Haskell程序员来说,这有点令人困惑.我可以想象你可能会遇到的情况:
let f a b = g c d in ...
Run Code Online (Sandbox Code Playgroud)
函数g将返回一个函数,两个参数作为返回值.在这种情况下,"fa b"是否需要用括号括起来进行模式匹配?我试图找到模式匹配如何发生的明确解释.
我已经阅读了大部分"了解你是一个很好的Haskell",以及"真实世界Haskell"和"Haskell的温和介绍"的片段,我还没有找到一个明确的解释,如何确定模式匹配是否应该在函数的参数或函数的返回值上发生.任何帮助清除这一点将不胜感激.
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |