function inspect(x) {
return (typeof x === 'function') ? inspectFn(x) : inspectArgs(x);
}
function inspectFn(f) {
return (f.name) ? f.name : f.toString();
}
function inspectArgs(args) {
return args.reduce(function(acc, x){
return acc += inspect(x);
}, '(') + ')';
}
function curry(fx) {
var arity = fx.length;
return function f1() {
var args = Array.prototype.slice.call(arguments, 0);
if (args.length >= arity) {
return fx.apply(null, args);
}
else {
var f2 = function f2() {
var args2 = Array.prototype.slice.call(arguments, 0);
return f1.apply(null, args.concat(args2));
}
f2.toString = function() {
return inspectFn(fx) + inspectArgs(args);
}
return f2;
}
};
}
compose = function() {
var fns = toArray(arguments),
arglen = fns.length;
return function(){
for(var i=arglen;--i>=0;) {
var fn = fns[i]
, args = fn.length ? Array.prototype.slice.call(arguments, 0, fn.length) : arguments
, next_args = Array.prototype.slice.call(arguments, (fn.length || 1));
next_args.unshift(fn.apply(this,args));
arguments = next_args;
}
return arguments[0];
}
}
add = curry(function(x, y) {
return x + y;
});
match = curry(function(what, x) {
return x.match(what);
});
replace = curry(function(what, replacement, x) {
return x.replace(what, replacement);
});
filter = curry(function(f, xs) {
return xs.filter(f);
});
map = curry(function map(f, xs) {
return xs.map(f);
});
reduce = curry(function(f, a, xs) {
return xs.reduce(f, a);
});
split = curry(function(what, x) {
return x.split(what);
});
join = curry(function(what, x) {
return x.join(what);
});
toUpperCase = function(x) {
return x.toUpperCase()
};
toLowerCase = function(x) {
return x.toLowerCase()
};
log = console.log
var _ = R;
var words = split(' ');
console.log('练习 1:',words('xiao sd shihou jjk'))
var sentences = undefined;
var wordsArr = map(words);
log('练习 1a:', wordsArr(['xiao 2','3 snd shihou jjk']));
var filterQs = function(xs) {
return filter(function(x){ return match(/q/i, x); }, xs);
};
log('练习2',filterQs(['q23','a Qc']))
var f2 = filter(match(/q/i))
log('练习2 答案',f2(['q23','a Qc']))
var _keepHighest = function(x,y){ return x >= y ? x : y; };
var max = function(xs) {
return reduce(function(acc, x){
return _keepHighest(acc, x);
}, -Infinity, xs);
};
var max2 = reduce(_keepHighest,-Infinity)
log('练习3',max([1,3,5,6,1,23]))
log('练习3-2',max2([ ]))
var slice = undefined;
var slice = _.curry(function(start, end, xs){ return xs.slice(start, end); });
log('cai egg', slice(0)(2)('3767'))
var take = undefined;
take = slice(0)
log('cai egg', take(2)('767'))
console