用最简单的术语来说,什么是柯里化,为什么这种方法比传统的编程范式更受青睐?
In simplest term, what is currying and why should this approach be favored over traditional programming paradigm?
我很难通过 web 上的多个资源来理解柯里化。没有更直观的柯里化示例吗?
此外,与传统编程范式相比,它有哪些优势?是否可以在非函数式编程上实现柯里化?
想象一个具有多个参数的函数 add(a,b) = a + b
。此函数将两个数字相加。现在想象一下,在某些情况下,您需要一个只接受一个参数的函数,并且您想要一个加 5 的函数。该函数可能如下所示:adds5(x) = 5 + x
.
现在,在某些情况下,您需要一个加 5 的函数,而在其他情况下,您需要一个加 10 的函数。因此,与其编写仅对其他常量执行相同操作的各种函数,不如编写一个函数来执行return 将作为参数的常量添加到第一个函数的函数:adder(a) = (b) = a + b
。
函数add
和adder
看起来很相似。 add
接受 2 个参数并将它们相加,adder
return 是一个将 adder
的参数添加到它自己的参数的函数。
从 add
到 adder
的转换称为柯里化。
因为这和函数有很大的关系,所以我想说,有了柯里化,那就是函数式编程。您可以使用任何编程语言进行函数式编程 - 毕竟,所有图灵完备语言都是等价的 ;-),但是在支持函数作为第一个 class 公民的函数式语言中,它要容易得多。
我很难通过 web 上的多个资源来理解柯里化。没有更直观的柯里化示例吗?
此外,与传统编程范式相比,它有哪些优势?是否可以在非函数式编程上实现柯里化?
想象一个具有多个参数的函数 add(a,b) = a + b
。此函数将两个数字相加。现在想象一下,在某些情况下,您需要一个只接受一个参数的函数,并且您想要一个加 5 的函数。该函数可能如下所示:adds5(x) = 5 + x
.
现在,在某些情况下,您需要一个加 5 的函数,而在其他情况下,您需要一个加 10 的函数。因此,与其编写仅对其他常量执行相同操作的各种函数,不如编写一个函数来执行return 将作为参数的常量添加到第一个函数的函数:adder(a) = (b) = a + b
。
函数add
和adder
看起来很相似。 add
接受 2 个参数并将它们相加,adder
return 是一个将 adder
的参数添加到它自己的参数的函数。
从 add
到 adder
的转换称为柯里化。
因为这和函数有很大的关系,所以我想说,有了柯里化,那就是函数式编程。您可以使用任何编程语言进行函数式编程 - 毕竟,所有图灵完备语言都是等价的 ;-),但是在支持函数作为第一个 class 公民的函数式语言中,它要容易得多。