繁体   English   中英

咖喱函数在Haskell中如何工作?

[英]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 * zg(y, z) = f(2, y, z) = 2 * y * zh(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM