柯里化

第6节 Scala中的高阶函数:1、2、3、

泄露秘密 提交于 2019-11-28 01:43:20
Scala高级特性 1. 课程目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特性,我们通常将 可以作为参数传递到方法中的表达式叫做函数 。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。 2.2. 作为值的函数 可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用。 定义函数时格式:val 变量名 = (输入参数类型和个数) => 函数实现和返回值类型 “=”表示将函数赋给一个变量 “=>”左面表示输入参数名称、类型和个数,右边表示函数的实现和返回值类型 2.3. 匿名函数 在Scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数。 由于Scala可以自动推断出参数的类型,所有可以写的跟精简一些 还记得神奇的下划线吗?这才是终极方式 2.4. 柯里化 2.4.1. 什么是柯里化 柯里化(Currying) 指的是把原来接受多个参数的函数变换成接受一个参数的函数过程,并且返回接受余下的参数且返回结果为一个新函数的技术。 2.4.2. 例子 (1) 一个普通的非柯里化的函数定义,实现一个加法函数: scala> def plainOldSum(x:Int,y:Int)=x

高阶函数

人走茶凉 提交于 2019-11-27 23:38:27
什么是高阶函数? 满足以下条件之一的函数 函数可以作为参数被传递 函数可以做为返回值输出 函数作为参数传递 把函数作为参数传递,这代表我们可以抽离出一部分容易变化的业务逻辑,把这部分业务逻辑放在函数的参数中,这样一来可以分离业务代码中变化与不变的部分。其中一个重要的应用场景就是常见的回调函数。 例如:在ajax的异步请求应用中,当我们想ajax请求返回之后做一些事情,但又并不知道请求返回的确切时间,最常见的方案就是把callback函数当做参数传入发起ajax的请求中,待请求完成之后执行callback函数。 当然,回调函数不仅仅应用在异步请求中,当一个函数不适合执行一些请求时,我们也可以把这些请求封装成一个函数,并把他们作为参数传递给另外一个函数,“委托”给另外一个函数执行。 //比如:在页面创建100个div,然后把这些div都设置为隐藏。 //下面是一种编码的方式 var appendDiv = function(){ for(var i=0; i<100; i++){ var div = document.createElement('div'); div.innerHTML = i; document.body.appendChild(div); div.style.display = 'none'; } } //上面这个函数 未免有点太个性化了

python 高阶函数、柯里化

旧巷老猫 提交于 2019-11-27 21:02:49
高阶函数 First Class Object 函数在python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等等 高阶函数 数学概念 y=g(f(x)) 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数 接受一个或多个函数作为参数 输出一个函数 自定义sort函数 排序问题 仿照内建函数sorted,请自行实现一个sort函数。能够为序列元素排序 思路 内建函数sorted函数返回一个新的列表,可以设置升序或降序,可以设置一个排序的函数。自定义函数也需要实现这些功能 新建一个列表,遍历原列表,和新列表的值依次比较决定如何插入到新列表中 sort函数实现。 基本思路的实现 #自定义排序函数: def sort(iterate): netlist = [] for x in iterate: for i,y in enumerate(netlist): if x > y: #找到大的就插入,如果换成x < y 是同样的 netlist.insert(i,x) #降序 break #这个braek 是必须加的,当if条件成立就变成死循环了 else: #不大于,说明就是最小的,尾部追加 netlist.append(x) return netlist print(sort([1,2,3,45,5,6,8,123])) 用参数控制升序还是降序

类型和程序设计语言

我的梦境 提交于 2019-11-27 19:10:20
编程语言的类型系统为何如此重要? - 知乎 https://www.zhihu.com/question/23434097/answer/43057230 《类型和程序设计语言》.pdf - 免费高速下载 - 皮皮盘-收入最高的网盘 当前标签:简单易懂的程序语言入门小册子 当前标签:简单易懂的程序语言入门小册子 简单易懂的程序语言入门小册子(9):环境,引入环境 古霜卡比 2014-05-16 05:46 阅读:793 评论:2 简单易懂的程序语言入门小册子(8):基于文本替换的解释器,小结 古霜卡比 2014-05-08 08:55 阅读:883 评论:5 简单易懂的程序语言入门小册子(7):基于文本替换的解释器,加入continuation,重构解释器 古霜卡比 2014-05-03 10:27 阅读:643 评论:0 简单易懂的程序语言入门小册子(1.5):基于文本替换的解释器,递归定义与lambda演算的一些额外说明 古霜卡比 2014-05-02 11:41 阅读:753 评论:0 简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation 古霜卡比 2014-04-28 11:18 阅读:926 评论:2 简单易懂的程序语言入门小册子(5):基于文本替换的解释器,递归,不动点,fix表达式,letrec表达式 古霜卡比 2014-04-23

swift的柯里化demo

半世苍凉 提交于 2019-11-27 13:29:37
func baseFunc(go:String, goo:String) -> String { return "hello" + go + goo; } func CurryFunc(baseFun:@escaping (String,String)->String) ->(String) -> (String)->String { func returnFun(other:String)->(String)->String{ func inReturnFun(inner:String) -> String{ return baseFun(inner,other); } return inReturnFun; } return returnFun; } let e = self.CurryFunc(baseFun: baseFunc)("fist"); print(e); let x = self.CurryFunc(baseFun: baseFunc)("fist")("otehr"); print(x); let go = self.CurryFunc(baseFun: { (a, b) -> String in return a + b; }); e () -> () 0x0000000105848190 FunctionGoo`partial apply

Scala 入门笔记 - 柯里化

主宰稳场 提交于 2019-11-27 12:59:50
把接受多个参数的函数转变成接受单一参数的函数 def currying(x: Int)(y: Int) = x * y currying(3)(4) val curry = currying(3) _ // curry(5) def currying2(X: Int) = (y: Int) => x * y ==================== // 定义隐式值 def m2(x: Int)(implicit y: Int = 5) = x * y m2(3) // 可单独定义隐式值, 变量名随意,但不能定义多个 val implicit z = 100 m2(5)    来源: https://www.cnblogs.com/sunnystone85/p/11364187.html

JS专题之函数柯里化

狂风中的少年 提交于 2019-11-27 03:30:15
前言 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。 一、为什么会有函数柯里化? Currying 的重要意义在于可以把函数完全变成「接受一个参数;返回一个值」的固定形式,这样对于讨论和优化会更加方便。 将关注的重点聚焦到函数本身,而不因冗余的数据参数分散注意力。 有这样的说法,并非柯里化有什么意义,而是,当函数可以作为函数的参数和返回值,成为函数式编程语言后,就会不可避免地产生函数柯里化。 二、具体实现 先来一个简单的 add 函数 function add(x, y) { return x + y; } add(2, 3); // 5 复制代码 重要的概念多说一遍:函数柯里化就是接收多个参数的函数变换为接收一个函数,并返回接收余下参数,最终能返回结果的技术 。 那么,继续: function add(x) { return function(y) { return x + y; } } add(2)(3); // 5 复制代码 所以,曾经的一个函数,因为闭包操作(返回函数并访问了自由变量的行为),变成了多个接收一个参数的函数。 所以简单来讲:函数柯里化就是意图将函数的参数变成一个。让函数可以输入一个值,就返回一个相对应的值