fn

js柯里化函数

霸气de小男生 提交于 2019-12-02 11:39:33
1 function sub_curry(fn) { 2 var args = [].slice.call(arguments, 1); 3 return function() { 4 return fn.apply(this, args.concat([].slice.call(arguments))); 5 }; 6 } 7 8 function curry(fn, length) { 9 length = length || fn.length; 10 return function() { 11 if (arguments.length < length) { 12 var combined = [fn].concat(Array.prototype.slice.call(arguments)); 13 return curry(sub_curry.apply(this, combined), length - arguments.length); 14 } else { 15 return fn.apply(this, arguments); 16 } 17 }; 18 } 19 20 function add(a, b, c) { 21 console.log(a + b + c); 22 } 23 24 curry(add)(1, 2, 3); 25 curry

ProblemF: Fibonacci数列

纵然是瞬间 提交于 2019-12-02 11:22:43
Description Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 Input 输入包含一个整数n。 Output 输出一行,包含一个整数,表示Fn除以10007的余数。 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 Sample Input 10 Sample Output 55 ps:重要思想余数两两相加得出答案!!! # include <iostream> using namespace std ; typedef long long ll ; long long int a [ 100000 ] ; int main ( ) { int n ; cin >> n ; a [ 0 ] = 1 ; a [ 1 ] = 1 ; for ( int i = 2 ; i < n ; i ++ ) { a [ i ] = ( a [ i - 1 ] + a [ i - 2 ] ) % 10007 ; } cout << a [ n - 1 ] ; // for(int i=0;i<1000;i++){ // cout<<"a

promise简单实现

烈酒焚心 提交于 2019-12-02 09:13:54
function isFunction(fn){ return Object.prototype.toString.call(fn) === '[object Function]'; } let ST = { pending: 0, resolved: 1, rejected: 2 } function Promise(fn){ let self = this; self.status = ST.pending; self.value = ''; self.reason = ''; self.resolveFns = []; self.rejectFns = []; //setTimeout延迟执行,将reslove执行放在下个循环,保证then方法先于它执行 function resolve(val){ setTimeout(() => { if(self.status == ST.pending){ self.status = ST.resolved; self.value = val; //用数组保存回调,是为了处理一个promise挂载多个then的情况 //注意不是链式,这种场景很少出现 /* 形如: promise.then(resolve1,reject1) promise.then(resolve2,reject2) promise.then(resolve3

JavaScript中的反柯里化

蓝咒 提交于 2019-12-02 06:37:23
转载自:https://www.cnblogs.com/zztt/p/4152147.html 柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。 因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。 请见我的另一篇博客· 浅析 JavaScript 中的 函数 currying 柯里化 反柯里化 相反,反柯里化的作用在与扩大函数的适用性,使本来作为特定对象所拥有的功能的函数可以被任意对象所用. 即把如下给定的函数签名, obj.func(arg1, arg2) 转化成一个函数形式,签名如下: func(obj, arg1, arg2) 这就是 反柯里化的形式化描述。 当然是有个前提的,函数 y 需要语言上支持鸭子类型, 引自维基 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。...在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法... 例如,下面的一个简单实现: Function.prototype.uncurrying = function() { var that = this; return function() { return Function.prototype.call

从0开始学算法--数学(4.1矩阵)

为君一笑 提交于 2019-12-02 03:02:46
1,概念 以下词条解释来自百度百科:代数,代数系统,线性代数,矩阵 代数   代数是研究数、数量、关系、结构与代数方程(组)的通用解法及其性质的数学分支。 初等代数 一般在中学时讲授,介绍代数的基本思想:研究当我们对数字作加法或乘法时会发生什么,以及了解变量的概念和如何建立 多项式 并找出它们的根。代数的研究对象不仅是数字,而是各种抽象化的结构。在其中我们只关心各种关系及其性质,而对于“数本身是什么”这样的问题并不关心。常见的代数结构类型有群、 环 、域、模、 线性空间 等。 代数系统   非空集合A和A上k个一元或二元运算f1,f2,…,fk组成的系统称为一个代数系统,简称代数,记作(A,f1,f2,…,fk)。由定义可知,一个代数系统需要满足下面3个条件:(1)有一个非空集合A;(2)有一些建立在集合A上的运算;(3)这些运算在集合A上是封闭的。有的书上对代数系统定义时不要求运算的封闭性,而是把具有封闭性的代数系统定义为一个新的概念- 广群 。 线性代数   线性代数是数学的一个分支,它的研究对象是 向量 , 向量空间 (或称线性空间), 线性变换 和有限维的 线性方程组 。向量空间是 现代数学 的一个重要课题;因而,线性代数被广泛地应用于 抽象代数 和 泛函分析 中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的 非 线性模型

JavaScript 实现 reduce() 方法函数

戏子无情 提交于 2019-12-02 01:39:52
更新:增加递归实现的方法 更新:重构非递归实现的方法 思路 与之前两篇文章( map()的实现 , filter()的实现 )中的迭代方法不一样,reduce() 是归并方法。 reduce 接收两个参数: 第一个参数是在每一项上调用的函数 该函数接收 4 个参数: 前一个值 prev 当前值 cur 项的索引 index 数组对象 array 第二个可选参数是作为归并基础的初始值 reduce 方法返回 一个最终的值 。 代码表示: arr.reduce(function(prev, cur, index, arr){}, initialValue) 归并 与之前的迭代不同,归并不是对每一项都执行目标函数,而是可以概括为如下两步: 不断地对数组的前两项“取出”,对其执行目标函数,计算得到的返回值 把上述返回值“填回”数组首部,作为新的 array[0] 持续循环执行这个过程,直到数组中每一项都访问了一次 返回最终结果 举例说明 对数组 [1,2,3] 归并执行 (prev, cur) => prev + cur ,流程如图: [1, 2, 3] // 取出 1 + 2 ,填回 3 [3, 3] // 取出 3 + 3 ,填回 6 [6] // 最终结果为 6 所以得到 6 。 实现 第一版 根据这个思路,得到第一版代码如下 // 第一版 Array.prototype

07_事件_BOM_定时器_特效(DOM加强)

我的梦境 提交于 2019-12-02 00:28:54
复习: 事件绑定的三种方式: 事件: 绑定事件的区别: 为元素解绑事件: 第一种解绑的方式: 第二种解绑的方式: 第三种解绑的方式: 绑定事件和 解绑事件的兼容代码: 1 //绑定事件 和 取消绑定的 兼容代码: 2 function addEventListener(ele, type, fn) { 3 if(ele.addEventListener){ 4 ele.addEventListener(type,fn,false); 5 }else if(ele.attachEvent){ 6 ele.attachEvent("on"+type,fn); 7 }else{ 8 ele["on"+type] = fn; 9 } 10 } 11 12 function removeEventListener(ele, type, fn) { 13 if(ele.removeEventListener){ 14 ele.removeEventListener(type,fn,false); 15 }else if(ele.detachEvent){ 16 ele.detachEvent("on"+type,fn); 17 }else{ 18 ele["on"+type] =null; 19 } 20 } View Code 到目前为止,common.js 的代码如下: 1 /** 2 *

【前端开发】ES6知识点系统化梳理笔记

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 23:36:12
>ES6扩展: #Map和Set是es6标准新增的数据类型 ##Map是key-value(关键字-值),Map允许修改value,不允许修改key,Map支持下标操作 var m = new Map([['zhangsan',20],['lisi',25],['wangwu',19]]); m.get('lisi') //25 ##Set是key(关键字),Set的迭代器是const,不允许修改元素值,Set不支持下标操作 var m = new Set([1,2,3,4,3,2]); m // Set{1,2,3,4} #Symbol typeof Symbol 代表独一无二的值; 避免键名重复被覆盖; 无法进行字符串拼接和数字的计算; 可以转布尔型; #find 发现数组中满足条件的第一个 var m = [10,20,30,60,26,50]; var n = m.find(function(item){ return item > 50 }) console.log(n) // 60 取数组中第一个满足条件的 #findIndex 发现数组中满足条件的第一个数的下标序号 var m = [10,20,30,60,26,50]; var n = m.findIndex(function(item){ return item > 50 }) console.log(n) //

ValueError:GraphDef cannot be larger than 2GB.解决办法

江枫思渺然 提交于 2019-12-01 18:51:33
在使用TensorFlow 1.X版本的estimator的时候经常会碰到类似于 ValueError:GraphDef cannot be larger than 2GB 的报错信息,可能的原因是数据太大无法写入graph。 一般来说,常见的数据构建方法如下: def input_fn(): features, labels = (np.random.sample((100,2)), np.random.sample((100,1))) dataset = tf.data.Dataset.from_tensor_slices((features,labels)) dataset = dataset.shuffle(100000).repeat().batch(batch_size) return dataset ... estimator.train(input_fn) TensorFlow在读取数据的时候会将数据也写入Graph,所以当数据量很大的时候会碰到这种情况,之前做实验在多GPU的时候也会遇到这种情况,即使我把batch size调到很低。所以解决办法有两种思路,一直不保存graph,而是使用 feed_dict 的方式来构建input pipeline。 不写入graph 我的代码环境是TensorFlow1.14,所以我以这个版本为例进行介绍。

[算法]斐波那契

▼魔方 西西 提交于 2019-12-01 18:46:15
#include <iostream> #include <cmath> using namespace std; //2.斐波那契--递归版本 //fn=1;当n=0,1 //fn=fn-1+fn-2;当n>1 //算法复杂度O(2^n) static int fibonacci(int n) { if (n<=1) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } //2.斐波那契--非递归版本 //1/sqrt(5) ( pow((1+sqrt(5))/2,n+1) - pow((1-sqrt(5))/2,n+1) ) //算法复杂度O(1) static int fibonacci_iter(int n) { return 1 / sqrt(5) * (pow((1 + sqrt(5)) / 2, n + 1) - pow((1 - sqrt(5)) / 2, n + 1)); } int main() { cout<<fibonacci(5)<<endl; cout<<fibonacci_iter(5)<<endl; cout << "hello world" << endl; return 0; } 来源: https://www.cnblogs.com/tailiang/p/11712843.html