functional-javascript-workshop
Version:
The basics of functional programming in JavaScript. No libraries required.
54 lines (42 loc) • 1.46 kB
JavaScript
/**
* Created by naor on 10/10/13.
* Migrated by tdd on 03/16/15.
*/
;
var runner = require('../runner')
var exercise = module.exports = runner.custom(function(curryN) {
var result = []
result.push("Testing curryN without n:")
function add3(one, two, three) {
return one + two + three
}
var curryC = curryN(add3)
var curryB = curryC(1)
var curryA = curryB(2)
result.push("curryA(3) => " + curryA(3)) // => 6
result.push("curryA(10) => " + curryA(10)) // => 13
result.push("curryN(add3)(1)(2)(3) => " + curryN(add3)(1)(2)(3)) // => 6
function joinWithComma() {
return Array.prototype.join.call(arguments, ',');
}
var curry1 = curryN(joinWithComma, 4)
var curry2 = curry1(1)
var curry3 = curry2(2)
var curry4 = curry3(3)
result.push(curry4(4))
result.push("Testing we can change the inner function to generate different set of outputs:")
var curry3 = curry2(6)
var curry4 = curry3(3)
result.push(curry4(5))
result.push("Testing curryN with n:")
function strConcat(){
var args = Array.prototype.slice.call(arguments)
return Array.prototype.concat.apply([], args).join(" ")
}
var words = exercise.__('five_words').split(',')
var call = words.map(function(word) { return "('" + word + "')" }).join('')
result.push(
"curryN(strConcat, 5)" + call + ") => " +
curryN(strConcat, 5)(words[0])(words[1])(words[2])(words[3])(words[4]))
return result
}).hideInput()