这是一道作业题:



到目前为止,我了解柯里化。但是我找不到关于编译器如何在内存中实现这​​样的函数的任何资源。我能否指出正确的方向,可能是搜索关键字或资源链接,或者可能是在此处解释编译器如何生成类型和符号表以及与问题相关的其他内容。

谢谢。

最佳答案

柯里化是将 n 个参数函数转换为 n 个一元函数:

例如,如果您有一个三元函数 f::t1 x t2 x t3 -> t 您可以将此函数表示为

f1 :: t1 -> (t2 -> (t3 -> t))

换句话说,f1 是一个函数,它接受一个类型为 t1 的参数并返回一个类型为 f2 的函数。
f2 :: t2 -> (t3 -> t)

f2 是一个函数,它接受一个类型为 t2 的参数并返回一个类型为 f3 的函数。
f3 :: t3 -> t

f3 是一个函数,它接受一个类型为 t3 的参数并返回类型为 t。

例如,如果 f(a,b,c) = a+b*c 那么:
f3(C) == c1+c2*C where c1 and c2 are constant.
f2(B) == f3(C) where c1 is constant and c2 is replaced with B.
f1(A) == f2(B) where c1 is replaced with A.

在函数式语言中,函数是一等公民,因此将它们作为返回类型是很常见的。

关于柯里化和编译器设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1656119/

10-12 22:47