首页 文章

haskell中的函数参数

提问于
浏览
1

在这个模式匹配方程中,我可以使用括号使cons运算符比函数应用程序更优先:

tail (_:xs) = xs

但是,如果我尝试写这个,它将是“模式中的解析错误”:

f (g x) = 7

我看到 g x 产生一个值,我们应该直接传递该值 . 或者以这种方式 f g x = g x + 7 我们在 f 定义的主体中使用参数 x 调用 g .

但是不允许在模式中传递函数调用的原因是什么?

2 回答

  • 4

    模式匹配是关于解构事物 . 按照“我使用构造函数 A 构建此数据”的思路 . 通过模式匹配,我们可以看到我们提供的值 A .

    这意味着这意味着构造函数必须是可逆的,我们需要能够根据结果找出构造函数输入 . 现在如果你想用函数调用做同样的事情,你只需要反转一个函数,想象一下 f = const 0 .

    听起来你想要的是一种视图模式 . 您可以在此处传递数据,将其提供给函数,然后对结果进行模式匹配 .

    {-# LANGUAGE ViewPatterns #-}
    foo (bar -> Just a) = a
    

    这应该被理解为“将参数提供给 bar ,然后在结果 Maybe 上进行模式匹配” .

  • 2

    我们没有传递任何模式 . 我们描述了传递的数据必须如何使相应的等式生效 .

    现在,事实证明,对于 gx 的某种组合,每个值的形式为 g x ,因此模式 g x 可以缩写为 x .

相关问题