Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中的函数参数_Haskell_Functional Programming_Arguments - Fatal编程技术网

haskell中的函数参数

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值 这意味着构造函数必须

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

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
可以是任何函数,因此在这个正确的版本中,模式不能缩写为x
fgx=gx+7
我认为OP心里有一个特定的
g
,他想要一个缩写,用于将函数应用于身体中的参数。当然,
g=id
使这个问题变得微不足道:)
g
可以是任何函数,因此在这个正确的版本中,模式不能缩写为x
fgx=gx+7
我认为OP心里有一个特定的
g
,他想要一个缩写,用于将函数应用于身体中的参数。当然,
g=id
使得这个问题变得微不足道:)