Programaci贸n funcional en JavaScript


Empezando


				

Funciones an贸nimas


					function add(x,y) {
						return x+y;
					}
				

Estructuras de datos inmutables


					let xs = ["馃崚","馃崙","馃崓"];
					let ys = ["馃崌","馃崏","馃崍"];
				

Recursi贸n


					function sum(n) {
					}
				

Inducci贸n estructural


					function arraySum(xs) {
					}
				

Longitud de una lista


					function length(xs) {
					}
				

Elemento m谩ximo de una lista


					function maximum(xs) {
					}
				

Rangos


					function range(n, m) {
					}
				

Invertir elementos de una lista


					function reverse(xs) {
					}
				

Pertenencia de un elemento a una lista


					function elem(x, xs) {
					}
				

Ordenaci贸n por inserci贸n


					function insert(x, xs) {
					}
					
					function sort(xs) {
					}
				

Separar cadena por un caracter


					function split(char, str, acc="") {
					}
					  
					split(" ", "La vida es una lenteja"); // ["La", "vida", "es", "una", "lenteja"]
				

Orden superior


					function insertBy(fn, x, xs) {
					}
					
					function sortBy(fn, xs) {
					}
				

Elemento m谩ximo de una lista


					function maximumOn(fn, xs) {
					}

					const ponies = ["Applejack", "Pinkie Pie", "Rainbow Dash", "Fluttershy"];
					maximumOn(x => x.length, ponies);
				

Patrones funcionales


					function arraySum(xs) {
					  if(xs.length === 0)
					    return 0;
					  const [head, ...tail] = xs;
					  return head + arraySum(tail);
					}
				

Asociaciones


					const fruits = ["banana", "apple", "pineapple", "kiwi", "peach", "strawberry", "melon"];
					getEmoji("pear");
				

Filtros


					const fruits = ["banana", "apple", "pineapple", "kiwi", "peach", "strawberry", "melon"];
					const emojis = fruits.map(getEmoji);
					isGreen("馃崘");
				

Pliegues


// f(x1, f(x2, f(x3, .... f(xn, init))))
function foldr(fn, init, xs) {
  if(xs.length === 0)
    return init;
  const [head, ...tail] = xs;
  return fn(head, foldr(fn, init, tail));
}

// f(f(f(f(init, x1), x2), x3), ... xn)
function foldl(fn, init, xs) {
  if(xs.length === 0)
    return init;
  const [head, ...tail] = xs;
  return foldl(fn, fn(init, head), tail);
}
				

Capitalizar la primera letra de cada palabra


					const split = $.split;

					function upper(word) {
					if(word.length === 0)
						return "";
					return word[0].toUpperCase() + word.slice(1);
					}

					function capitalize(phrase) {
					}

					// capitalize("la vida es una lenteja"); // "La Vida Es Una Lenteja"
				

Currificaci贸n de funciones


					const add = 
				

Composici贸n de funciones


					function compose(g, f) {
					}
				

No determinismo


					const pets = ["馃惗","馃惀","馃惎"];
					likes("馃惀");
					items("馃崠");
				

Ternas pitag贸ricas


					function rightTriangles(n) {
						const list = $.range(1, n);
						return undefined;
					}
				

El salto del caballo


					const jumps = [[1,2],[2,1],[-1,2],[2,-1],[1,-2],[-2,1],[-1,-2],[-2,-1]];
					const onBoard = ([x,y]) => x >= 1 && x <= 8 && y >= 1 && y <= 8;
					const moveKnight = ([x,y]) => undefined;
					const reachIn3 = start => undefined;
				

Permutaciones


					function splits(xs) {
					}

					function permutations(xs) {
					}