Portál AbcLinuxu, 15. května 2025 05:12
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.