|
|
|
var max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm; |
|
max = curry$(function(x$, y$){ |
|
return x$ > y$ ? x$ : y$; |
|
}); |
|
min = curry$(function(x$, y$){ |
|
return x$ < y$ ? x$ : y$; |
|
}); |
|
negate = function(x){ |
|
return -x; |
|
}; |
|
abs = Math.abs; |
|
signum = function(x){ |
|
if (x < 0) { |
|
return -1; |
|
} else if (x > 0) { |
|
return 1; |
|
} else { |
|
return 0; |
|
} |
|
}; |
|
quot = curry$(function(x, y){ |
|
return ~~(x / y); |
|
}); |
|
rem = curry$(function(x$, y$){ |
|
return x$ % y$; |
|
}); |
|
div = curry$(function(x, y){ |
|
return Math.floor(x / y); |
|
}); |
|
mod = curry$(function(x$, y$){ |
|
var ref$; |
|
return ((x$) % (ref$ = y$) + ref$) % ref$; |
|
}); |
|
recip = (function(it){ |
|
return 1 / it; |
|
}); |
|
pi = Math.PI; |
|
tau = pi * 2; |
|
exp = Math.exp; |
|
sqrt = Math.sqrt; |
|
ln = Math.log; |
|
pow = curry$(function(x$, y$){ |
|
return Math.pow(x$, y$); |
|
}); |
|
sin = Math.sin; |
|
tan = Math.tan; |
|
cos = Math.cos; |
|
asin = Math.asin; |
|
acos = Math.acos; |
|
atan = Math.atan; |
|
atan2 = curry$(function(x, y){ |
|
return Math.atan2(x, y); |
|
}); |
|
truncate = function(x){ |
|
return ~~x; |
|
}; |
|
round = Math.round; |
|
ceiling = Math.ceil; |
|
floor = Math.floor; |
|
isItNaN = function(x){ |
|
return x !== x; |
|
}; |
|
even = function(x){ |
|
return x % 2 === 0; |
|
}; |
|
odd = function(x){ |
|
return x % 2 !== 0; |
|
}; |
|
gcd = curry$(function(x, y){ |
|
var z; |
|
x = Math.abs(x); |
|
y = Math.abs(y); |
|
while (y !== 0) { |
|
z = x % y; |
|
x = y; |
|
y = z; |
|
} |
|
return x; |
|
}); |
|
lcm = curry$(function(x, y){ |
|
return Math.abs(Math.floor(x / gcd(x, y) * y)); |
|
}); |
|
module.exports = { |
|
max: max, |
|
min: min, |
|
negate: negate, |
|
abs: abs, |
|
signum: signum, |
|
quot: quot, |
|
rem: rem, |
|
div: div, |
|
mod: mod, |
|
recip: recip, |
|
pi: pi, |
|
tau: tau, |
|
exp: exp, |
|
sqrt: sqrt, |
|
ln: ln, |
|
pow: pow, |
|
sin: sin, |
|
tan: tan, |
|
cos: cos, |
|
acos: acos, |
|
asin: asin, |
|
atan: atan, |
|
atan2: atan2, |
|
truncate: truncate, |
|
round: round, |
|
ceiling: ceiling, |
|
floor: floor, |
|
isItNaN: isItNaN, |
|
even: even, |
|
odd: odd, |
|
gcd: gcd, |
|
lcm: lcm |
|
}; |
|
function curry$(f, bound){ |
|
var context, |
|
_curry = function(args) { |
|
return f.length > 1 ? function(){ |
|
var params = args ? args.concat() : []; |
|
context = bound ? context || this : this; |
|
return params.push.apply(params, arguments) < |
|
f.length && arguments.length ? |
|
_curry.call(context, params) : f.apply(context, params); |
|
} : f; |
|
}; |
|
return _curry(); |
|
} |