[英]How do curried functions work in Haskell?
我正在学习Haskell。 我知道Haskell中的任何函数只能接受一个参数。 因此,如果您看到函数max 2 4
; 实际上是(max 2) 4
。 他们说的是将1st 2
(作为参数)应用于max
,该max
返回一个以4
作为参数的函数。 我无法理解的是将2应用于max时会发生什么? 它返回一个称为(max 2)
的函数是什么意思?
让我再举一个例子,使我的问题更加清楚。 使用此函数: multiply xyx = x*y*z
。 他们说实际上是这样评估的: ((multiply x) y) z
。 现在,我给出以下输入: multiply 2*4*5
如何计算?
multiply 2
返回(multiply 2)
并将4用作参数:
(multiply 2) 4
现在,这将返回- ((multiply 2) 4)
还是multiply 8
? 如果在此步骤中将4和2相乘,Haskell如何知道它必须这样做(因为该函数只能乘以3个参数)?
只是从数学上考虑一下:假设有一个函数带有两个变量: f(x, y)
。 修复x=2
将为您提供一个带有一个变量的新函数: g(y)=f(2, y)
如果f(x, y) = max(x, y)
给出x和y的最大值,则g(y) = f(2, y) = max(2, y)
给出2和y的最大值。
对于f(x, y, z) = x * y * z
, g(y, z) = f(2, y, z) = 2 * y * z
, h(z) = g(4, z) = f(2, 4, z) = 2 * 4 * z
您也可以将x = 2和z = 4固定为p(y) = f(2, y, 4)
。 在Haskell中
\y -> multiply 2 y 4
对于该实现,Haskell实际上不会将2和4相乘,因为它是惰性计算的。 就是说,它直到需要时才计算值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.