Arquivo de 19 de Julho de 2007
JavaScript…
Implementação do código do post sobre closures em JavaScript (com umas coisinhas a mais):
function cons(a, b) { return function(first) { return first ? a : b; } } function car(c) { return c(true); } function cdr(c) { return c(false); } function list() { arguments.shift = Array.prototype.shift; if (arguments.length == 0) { return null; } else { return cons(arguments.shift(), list.apply(this, arguments)); } } function mapcar(fun, lst) { if (null == lst) { return null; } else { return cons(fun(car(lst)), mapcar(fun, cdr(lst))); } } function reduce(fun, init, lst) { if (null == lst) { return init; } else { return fun(car(lst), reduce(fun, init, cdr(lst))); } } function filter(fun, lst) { if (null == lst) { return null; } else { if (fun(car(lst))) { return cons(car(lst), filter(fun, cdr(lst))); } else { return filter(fun, cdr(lst)); } } }
Um teste tosto:
var lst = list(1, 2, 3, 4); mapcar(print, lst); print(reduce(function (a, b) { return a + b; }, 0, lst)); mapcar(print, filter(function (a) { return a % 2; }, lst));
Para rodar, usei o Rhino.
1 comentário »