阅读真实世界Haskell中关于monad的章节。我偶然发现了记号,特别是当我们有pattern <- action
之类的东西时。
-- file: ch14/Do.hs
doNotation3 =
do pattern <- act1
act2
{- ... etc. -}
actN
上面的例子被贬低为:
-- file: ch14/Do.hs
translated3 =
let f pattern = do act2
{- ... etc. -}
actN
f _ = fail "..."
in act1 >>= f
我无法理解你如何在let子句中有两个模式匹配案例?
我不明白你如何在同一个let子句中拥有f pattern
和f _
。我试着查看你是否可以在let子句中有多个模式匹配,但从我所看到的,大多数人都使用case语句来做到这一点。
我想帮助理解这里的实际情况?
答案 0 :(得分:3)
我无法理解你如何在let子句中有两个模式匹配案例?
嗯,你可以:
example :: Int -> Int
example n =
let f 0 = 1
f x = x * f (x - 1)
in f n
请记住,这是一个let … in…
表达式,而不是do
&#39; s let
。对于这种表达式中的所有绑定,(几乎)与通常的顶级表达式相同的规则保持不变,例如你可以使用模式匹配。
如果将其转换为where
,可能会更容易一些:
example :: Int -> Int
example n = f n
where
f 0 = 1
f x = x * f (x - 1)