// Numbers. (function(baselib) { var exports = {}; baselib.numbers = exports; var isNumber = jsnums.isSchemeNumber; var isReal = jsnums.isReal; var isRational = jsnums.isRational; var isComplex = isNumber; var isInteger = jsnums.isInteger; var isNatural = function(x) { return (jsnums.isExact(x) && isInteger(x) && jsnums.greaterThanOrEqual(x, 0)); }; var isNonNegativeReal = function(x) { return isReal(x) && jsnums.greaterThanOrEqual(x, 0); }; var isByte = function(x) { return (isNatural(x) && jsnums.lessThan(x, 256)); }; // sign: number -> number var sign = function(x) { if (jsnums.isInexact(x)) { if (jsnums.greaterThan(x, 0) ) { return jsnums.makeFloat(1); } else if (jsnums.lessThan(x, 0) ) { return jsnums.makeFloat(-1); } else { return jsnums.makeFloat(0); } } else { if (jsnums.greaterThan(x, 0)) { return 1; } else if (jsnums.lessThan(x, 0)) { return -1; } else { return 0; } } }; ////////////////////////////////////////////////////////////////////// // Exports // We first re-export everything in jsnums. for (var prop in jsnums) { if (jsnums.hasOwnProperty(prop)) { exports[prop] = jsnums[prop]; } } exports.isNumber = jsnums.isSchemeNumber; exports.isReal = isReal; exports.isRational = isRational; exports.isComplex = isComplex; exports.isInteger = isInteger; exports.isNatural = isNatural; exports.isByte = isByte; exports.isNonNegativeReal = isNonNegativeReal; exports.sign = sign; })(this['plt'].baselib);