catgirl-calculus/src/execute.mjs

25 lines
459 B
JavaScript

const id = x => x;
export function execute (program, arg = id) {
if (!program.env.has("main")) {
return arg;
}
const main = program.env.get("main");
return call_fn(main, [arg])();
}
function call_fn (fn, env = []) {
if (typeof fn === "number") {
while (fn > 0) {
fn--;
env = env[1];
}
return env[0];
} else if (fn[0] === 0) {
return arg => call_fn(fn[1], [arg, env]);
} else {
return call_fn(fn[0], env)(call_fn(fn[1], env));
}
}