Created
April 13, 2016 04:06
-
-
Save newswim/81150a65abb45e81ef1470ba002be6c1 to your computer and use it in GitHub Desktop.
Hardcore functional programming (exercise 1)
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
var _ = R; | |
/***************************************** | |
C U R R Y I N G E X A M P L E | |
******************************************/ | |
// We've got a nice multiply function. | |
// It takes two arguments. | |
console.log( _.multiply(3, 4) ); | |
// But it has been secretly curried already | |
// so we can feed it fewer arguments and it | |
// will return a new function. | |
// | |
// How about making a function to double a | |
// value? Done. | |
var double = _.multiply(2); | |
console.log( double(13) ); | |
/***************************************** | |
Y O U R T U R N | |
******************************************/ | |
// _.split pulls a string apart around a | |
// given value | |
console.log( _.split('i', 'mississippi') ); | |
// -- Challenge 1 ------------------------ | |
// Make a function called "words" which | |
// returns a list of words in a string. | |
// Use only the split function and | |
// currying. | |
console.log("Testing challenge 1..."); | |
var words = _.split(' '); // change this | |
assertEqualArrays( | |
['one', 'two', 'three'], | |
words('one two three') | |
); | |
console.log("passed"); | |
// -- Challenge 2 ------------------------ | |
// Create a function to triple every | |
// number in a list using only | |
// _.multiply and _.map. | |
console.log("Testing challenge 2..."); | |
var tripleList = _.map(_.multiply(3)) | |
assertEqualArrays([3,6,9], tripleList([1,2,3])); | |
console.log("passed"); | |
// -- Challenge 3 ------------------------ | |
// Create a function to find the largest | |
// number in a list. You can use the | |
// greater(a,b) function which returns the | |
// greater of its two inputs. You can do | |
// this with currying and one of the list | |
// functions _.map, _.filter, or _.reduce. | |
console.log("Testing challenge 3..."); | |
var greater = function(a,b) { | |
return a > b ? a : b; | |
}; | |
var max = _.reduce(greater, _.map) | |
assertEqual(9, max([1,-3483,9,7,2])); | |
assertEqual(-1, max([-21,-3483,-2,-1])); | |
console.log("passed"); | |
console.log("All tests pass."); | |
/****************************************** | |
B A C K G R O U N D C O D E | |
*******************************************/ | |
function assertEqualArrays(x,y) { | |
if(x.length !== y.length) throw("expected "+x+" to equal "+y); | |
for(var i in x) { | |
if(x[i] !== y[i]) { | |
throw("expected "+x+" to equal "+y); | |
} | |
} | |
} | |
function assertEqual(x,y){ | |
if(x !== y) throw("expected "+x+" to equal "+y); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
OUTPUTS