【问题标题】:what are curry and uncurry in high-order functions in ML什么是 ML 中的高阶函数中的 curry 和 uncurry
【发布时间】:2012-01-13 19:09:44
【问题描述】:
fun curry f x y = f (x, y); 
fun uncurry f (x, y) = f x y; 
fun compose (f, g) x = f (g x);

我了解 compose 函数,但不太了解 ML 中的 curry 和 uncurry。谁能解释一下这些?

另外,下面两行是什么意思?

(1) compose (compose, uncurry compose)
(2) compose (uncurry compose, compose)

【问题讨论】:

    标签: sml higher-order-functions currying ml


    【解决方案1】:

    如果您查看类型,那么您将清楚地看到 curryuncurry 的作用。

    请记住,可以定义将其参数作为一个大元组或多个参数的函数(实际上它变成了一个函数“链”,每个函数都有一个参数,请参见wiki):

    fun foo (a,x) = a*x+10
    fun bar a x = a*x+20
    

    它们的类型明显不同:

    val foo = fn : int * int -> int
    val bar = fn : int -> int -> int
    

    curry 函数将一个以元组形式接受其参数的函数“转换”为一个函数“链”,每个函数接受一个参数。当我们想要组合一系列函数,其中一些函数已部分应用参数时,这特别方便。看看foo的类型是如何变化的:

    - curry foo;
    val it = fn : int -> int -> int
    

    现在我们可以尝试组合这两个函数:

    - (curry foo 5 o bar 1) 4;
    val it = 130 : int
    

    前 4 个作为参数 x 应用于 bar 1,然后计算结果 (bar 1 4) 作为 x 参数提供给 foo

    显然uncurry用于逆过程:

    - uncurry bar;
    val it = fn : int * int -> int
    

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2021-07-12
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多