fwf

by Igor Cuckovic

JavaScript

function add(a, b) {
  return a + b
}

function sub(a, b) {
  return a - b
}

function mul(a, b) {
  return a * b
}


function identityf(num) {
  return function() {
    return num
  }
}

function addf(a) {
  return function(b) {
    return a + b
  }
}

function liftf(func) {
  return function(a) {
    return function(b) {
      return func(a, b)
    }
  }
}

const curry = (func, a) => {
  return b => {
    return func(a, b)
  }
}

const inc = addf(1)

const inc2 = liftf(add)(1)

const inc3 = curry(add, 1)

//console.log(inc3(5))

const twice = fun => {
	return x => {
  	return fun(x,x)
  }
}

//console.log(twice(add)(11))

const reverse = (func) => {
	return (...args) => {
  	return func(...args.reverse())
  }
}

//console.log(reverse(sub)(3,2))

const composeu = (func1, func2) => {
	return num => {
  	return func2(func1(num))
  }
}

const composeb = (fun1, fun2) => {
	return (a,b,c) => {
  	return fun2(fun1(a,b), c)
  }
}

//console.log(composeb(add,mul)(2,3,7))

const limit = (func, num) => {
	return (a,b) => {
    if (num >= 1) {
    	num -= 1
    	return func(a,b)
    }
    
    return
  	
  }
}

const add_ltd = limit(add, 1)

console.log(add_ltd(3,4))
console.log(add_ltd(3,4))