haskell中的函数参数
在这个模式匹配方程中,我可以使用括号使cons运算符比函数应用具有更高的优先级:haskell中的函数参数,haskell,functional-programming,arguments,Haskell,Functional Programming,Arguments,在这个模式匹配方程中,我可以使用括号使cons运算符比函数应用具有更高的优先级: tail (_:xs) = xs 但是,如果我尝试编写以下内容,将是“模式中的解析错误”: f (g x) = 7 我看到gx产生一个值,我们应该直接传递该值。或者通过这种方式fgx=gx+7我们在f定义的主体中使用参数x调用g 但是不允许在模式中传递函数调用的原因是什么呢?模式匹配是关于解构的。按照“我已经使用构造函数A构建了这个数据”的思路思考。通过模式匹配,我们可以看到我们提供的A值 这意味着构造函数必须
tail (_:xs) = xs
但是,如果我尝试编写以下内容,将是“模式中的解析错误”:
f (g x) = 7
我看到gx
产生一个值,我们应该直接传递该值。或者通过这种方式fgx=gx+7
我们在f
定义的主体中使用参数x
调用g
但是不允许在模式中传递函数调用的原因是什么呢?模式匹配是关于解构的。按照“我已经使用构造函数
A
构建了这个数据”的思路思考。通过模式匹配,我们可以看到我们提供的A
值
这意味着构造函数必须是可逆的,我们需要能够在给定结果的情况下计算出一个构造函数的输入。现在,如果你想对函数调用做同样的事情,你会遇到麻烦,因为你不能仅仅反转一个函数,想象一下f=const 0
听起来你想要的是一个视图模式。这是传递数据的地方,将其输入函数,然后对结果进行模式匹配
{-# LANGUAGE ViewPatterns #-}
foo (bar -> Just a) = a
这应该理解为“将参数馈送到
条
,然后对结果进行模式匹配可能
”模式匹配是关于解构事物的。按照“我已经使用构造函数A
构建了这个数据”的思路思考。通过模式匹配,我们可以看到我们提供的A
值
这意味着构造函数必须是可逆的,我们需要能够在给定结果的情况下计算出一个构造函数的输入。现在,如果你想对函数调用做同样的事情,你会遇到麻烦,因为你不能仅仅反转一个函数,想象一下f=const 0
听起来你想要的是一个视图模式。这是传递数据的地方,将其输入函数,然后对结果进行模式匹配
{-# LANGUAGE ViewPatterns #-}
foo (bar -> Just a) = a
这应该被理解为“将参数馈送到
条
,然后对结果进行模式匹配可能
”我们不会在模式中传递任何内容。我们描述了要使相应的方程生效,传递的数据必须是什么样子
现在,对于
g
和x
的组合,每个值的形式都是gx
,因此模式gx
可以缩写为x
,我们在模式中不传递任何内容。我们描述了要使相应的方程生效,传递的数据必须是什么样子
现在,事实证明,对于
g
和x
的某些组合,每个值的形式都是gx
,因此模式gx
可以缩写为x谢谢,我在《真实世界哈斯克尔》一书中找到了你的解释请注意,ViewPatterns
的一个好的替代品可以是PatternGuards
,在这种情况下,foo x |谢谢,我在《真实世界哈斯克尔》一书中找到了你的解释。请注意,ViewPatterns
的一个好替代品可以是PatternGuards
,在这种情况下,foo x |只是一个g
可以是任何函数,因此在这个正确的版本中,模式不能缩写为xfgx=gx+7
我认为OP心里有一个特定的g
,他想要一个缩写,用于将函数应用于身体中的参数。当然,g=id
使这个问题变得微不足道:)g
可以是任何函数,因此在这个正确的版本中,模式不能缩写为xfgx=gx+7
我认为OP心里有一个特定的g
,他想要一个缩写,用于将函数应用于身体中的参数。当然,g=id
使得这个问题变得微不足道:)