Created
May 9, 2015 14:22
-
-
Save kakikubo/cf3b66bf4d93c5dd4807 to your computer and use it in GitHub Desktop.
http://www.amazon.co.jp/dp/4798043761 にあるコードの一部(nodeで動かす)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env node | |
// 2つの数をたす | |
var plus = function(a,b) | |
{ | |
return a + b; | |
}; | |
// 2つの数を掛ける | |
var multiply = function(a,b) | |
{ | |
return a * b; | |
}; | |
// 標準だとこう | |
// var s = [0,1,2,3,4,5,6,7,8,9].reduce(plus); | |
// console.log(s); | |
// reduceを再定義 | |
var reduce = function(array, f){ | |
var s; | |
for (var n = 0; n < array.length; n++){ | |
if (n==0) | |
s = array[0]; | |
else | |
s = f(s,array[n]); // ここでfを使う | |
console.info('----------'); | |
console.info('n=', n); | |
console.info('array[n]=', array[n]); | |
console.info('s=', s); | |
} | |
return s; | |
}; | |
// var after1 = reduce([0,1,2,3,4,5,6,7,8,9], plus); | |
// var after2 = reduce([1,2,3,4], multiply); | |
// mapを再定義 | |
var map = function(array, f) | |
{ | |
var array1 = []; | |
for (var n = 0; n < array.length; n++){ | |
array1[n] = f(array[n]); // fを使う | |
console.info('----------'); | |
console.info('n=', n); | |
console.info('array[n]=', array[n]); | |
console.info('array1[n]=', array1[n]); | |
console.info('array1=', array1); | |
} | |
return array1; | |
} | |
// 2倍にする | |
var double = function(x) | |
{ | |
return x * 2; | |
}; | |
var after3 = map([0,1,2,3,4,5,6,7,8,9], double); | |
// 1足す | |
var increment = function(x) | |
{ | |
return x + 1; | |
}; | |
var after4 = increment(5); | |
console.info('----------'); | |
console.log(after4); | |
// 2倍して足す | |
var double_increment = function(x) | |
{ | |
return increment(double(x)); | |
} | |
var after5 = double_increment(5); | |
console.info('----------'); | |
console.log(after5 ); | |
// 足して2倍 | |
var increment_double = function(x) | |
{ | |
return double(increment(x)); | |
} | |
var after6 = increment_double(5); | |
console.info('----------'); | |
console.log(after6 ); | |
// f は1足す gは2倍する | |
var f = increment; | |
var g = double; | |
/** | |
* ひとつひとつかいていくならこう | |
*/ | |
/** | |
var fg = function(x) | |
{ | |
return g(f(x)); | |
}; | |
var gf = function(x) | |
{ | |
return f(g(x)); | |
}; | |
var ff = function(x) | |
{ | |
return f(f(x)); | |
}; | |
var gg = function(x) | |
{ | |
return g(g(x)); | |
}; | |
console.info('----------'); | |
console.log(f(5)); | |
console.log(g(5)); | |
console.log(fg(5)); | |
console.log(gf(5)); | |
console.log(ff(5)); | |
console.log(gg(5)); | |
**/ | |
// 2つの関数を順に実行した関数を返す | |
var compose = function(f, g) | |
{ | |
var fg = function(x) | |
{ | |
return g(f(x)); | |
}; | |
return fg; | |
}; | |
var fg = compose(f, g); | |
var gf = compose(g, f); | |
var ff = compose(f, f); | |
var gg = compose(g, g); | |
console.info('----------'); | |
console.log(f(5)); | |
console.log(g(5)); | |
console.log(fg(5)); | |
console.log(gf(5)); | |
console.log(ff(5)); | |
console.log(gg(5)); | |
var fggf = compose(fg, gf); | |
console.info('----------'); | |
console.log(fggf(5)); | |
//rangeの再定義 | |
var range = function(n) | |
{ | |
var array = []; | |
for (var i = 0; i < n; i++){ | |
array[i] = i; | |
} | |
return array; | |
}; | |
console.info('----------'); | |
console.log(range(10)); | |
// 奇数を求める | |
var even = function(x) | |
{ | |
return x * 2 + 1; | |
}; | |
var after7 = map(range(10), even); | |
console.info('----------'); | |
console.log(after7); | |
var after8 = reduce(range(10), plus); | |
console.info('----------'); | |
console.log(after8); | |
var after9 = reduce(range(1000), plus); | |
console.info('----------'); | |
console.log(after9); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment