#include #include "lib/Function.hpp" #include "lib/Loader.hpp" #include "lib/Value.hpp" extern "C" void num_arith(jk::Loader& loader) { loader.declare("+", [](auto args){ int res = 0; for (auto arg: args) { res += arg->as_int(); } return jk::Value::make_int(res); }); loader.declare("-", [](auto args){ int res = args[0]->as_int(); for (size_t i=1; ias_int(); } return jk::Value::make_int(res); }); loader.declare("*", [](auto args){ int res = 1; for (auto arg: args) { res *= arg->as_int(); } return jk::Value::make_int(res); }); loader.declare("/", [](auto args){ int res = args[0]->as_int(); for (size_t i=1; ias_int(); } return jk::Value::make_int(res); }); loader.declare("^", [](auto args){ int res = args[0]->as_int(); for (size_t i=1; ias_int()); } return jk::Value::make_int(res); }); loader.declare("%", [](auto args){ int res = args[0]->as_int(); for (size_t i=1; ias_int(); } return jk::Value::make_int(res); }); } extern "C" void lib(jk::Loader& loader) { num_arith(loader); loader.declare("dump", [](auto args){ std::string sep; for (auto arg: args) { std::cout << sep << arg->string(); sep = " "; } if (args.empty() == false) { std::cout << std::endl; } return jk::Value::make_nil(); }); }