Portál AbcLinuxu, 6. listopadu 2025 06:57
var fun = {
"+": function (a) { return a.reduce(function (a, b) { return a + b; }); },
"-": function (a) { return a.reduce(function (a, b) { return a - b; }); },
"*": function (a) { return a.reduce(function (a, b) { return a * b; }); },
"/": function (a) { return a.reduce(function (a, b) { return a / b; }); }
};
function lisp(aCode) {
var i, fn, arg;
if (Array.isArray(aCode)) {
fn = aCode[0];
arg = aCode.slice(1);
for (i = 0; i < arg.length; i++) {
if (Array.isArray(arg[i])) {
arg[i] = lisp(arg[i]);
}
}
return fun[fn](arg);
}
return aCode;
}
console.log(lisp(["/", 22, ["-", 10, ["+", 1, 1, 1]]]));
console.log(22 / (10 - (1 + 1 + 1)));
Ale ta hlavna funkcia lisp() sa mi zda neelegantna, nevedeli by ste niekto napisat ju elegantnejsie? Myslim ze to ide zapisat este kratsie.
Řešení dotazu:
if zbytečně. A možná bych raději testoval, kdy to není Array, abych měl zanořený jen ten return aCode a ne celý ten blok.
function lisp(aCode) {
var i, fn, arg;
if (!Array.isArray(aCode)) {
return aCode;
}
fn = aCode[0];
arg = aCode.slice(1);
for (i = 0; i < arg.length; i++) {
arg[i] = lisp(arg[i]);
}
return fun[fn](arg);
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.