Scala 柯里化

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

def clh (a : Int )( b : Int ) = a + b       //> clh: (a: Int)(b: Int)Int
      
      var oo = clh(8)(8)                          //> oo  : Int = 16
      
      var pp = clh(2)_                            //> pp  : Int => Int = <function1>
      pp(2)                                       //> res3: Int = 4
      
     def ppppp(a : Int )(b : Int )(c : Int )(d : Int ) = a+b*c-d
                                                  //> ppppp: (a: Int)(b: Int)(c: Int)(d: Int)Int
      
      
      ppppp(2)(3)(3)(4)                           //> res4: Int = 7
      
      val l = ppppp(2)_                           //> l  : Int => (Int => (Int => Int)) = <function1>
      
      val pl = l(3)(3)(4)                         //> pl  : Int = 7

时间: 2024-11-04 16:47:24

Scala 柯里化的相关文章

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有

Scala中的柯里化

一.初识Currying柯里化 柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的).它是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术. 简单理解就是改变函数的表达形式但其功能特性不变,这对于第一次接触柯里化的人来讲,这样的一个技术貌似有点“鸡肋”,但如果你有丰富的JS

【Scala】高阶函数和柯里化

高阶函数 在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: - 接受一个或多个函数作为输入 - 输出一个函数 在数学中它们也叫做算子(运算符)或泛函.微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数. 高阶函数的例子 假设有一个函数对给定两个数区间中的所有整数求和: def sumInts(a: Int, b: Int): Int = if(a > b) 0 else a + sumInts(a + 1, b) 如果现在要求连续整数的平方和: def square(x:

Scala函数柯里化(Currying or Curry)

柯里化(Currying) 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 简单的实现如下: scala> def add(x:Int, y:Int) = x + y add: (x: Int, y: Int)Int 假如我们应用的时候,是这样的:add(1,2) 柯里化函数: scala> def add(x:Int)(y:Int) = x + y Curry化最大的意义在于把多个参数的function等价转化成多

Scala 系列(十)—— 函数 &amp; 闭包 &amp; 柯里化

一.函数 1.1 函数与方法 Scala 中函数与方法的区别非常小,如果函数作为某个对象的成员,这样的函数被称为方法,否则就是一个正常的函数. // 定义方法 def multi1(x:Int) = {x * x} // 定义函数 val multi2 = (x: Int) => {x * x} println(multi1(3)) //输出 9 println(multi2(3)) //输出 9 也可以使用 def 定义函数: def multi3 = (x: Int) => {x * x}

JavaScript的柯里化函数

柯里化,或者说部分应用,是一种函数式编程的技术,对于熟悉以传统方式编写 JavaScript 代码的人来说可能会很费解.但如果使用得当,它可以使你的 JavaScript 函数更具可读性. 更具可读性和灵活性 函数式 JavaScript 被吹捧的优点之一就是拥有短小紧凑的代码风格,可以用最少行数.更少重复的代码得到正确的结果.有时这会以牺牲可读性为代价:如果你还不熟悉函数式编程的方法,这种方法写的代码会很难阅读和理解. 如果之前你遇到过柯里化这个术语,但是不知道它是什么意思,把它当做奇怪的.难

[Swift]Day07:柯里化

Swift 中的柯里化 新手上路的学习笔记,如有错误还望指出,不胜感激. 上集:理论预备 在学习柯里化的过程中接触到了三个有趣的概念,在此和各位分享一下. 偏函数 (Partial Function) 偏函数是只对函数定义域的一个子集进行定义的函数,是一个数学概念. 偏函数定义如下: 从输入值集合 X 到可能的输出值集合 Y 的函数 f (记作f:X→Y) 是 X 和 Y 的关系,若 f 满足多个输入可以映射到一个输出,但一个输入不能映射到多个输出,则为偏函数. 换句话说,定义域 X 中可能存在

函数柯里化(Currying)示例

”函数柯里化”是指将多变量函数拆解为单变量的多个函数的调用, 可以从高元函数动态地生成大量低元的函数.可以看成一个强大的函数工厂,结合函数式编程,可以叠加出很BT的能力.下面给出了一个示例,说明如何使用 Currying 用一行代码计算任意指数的多项式的和: 以及使用 Currying 实现一个简单的文件处理框架. 注意到, Currying 的过程中,参数的顺序是有讲究的.一般, 函数参数建议放在前面,按照想要调用的顺序: 数据参数放在后面. package scalastudy.basic

js之柯里化与反柯里化

先给大家介绍什么是柯里化与反柯里化 百度翻译: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的. 柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具