25 lines
459 B
JavaScript
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));
|
|
}
|
|
}
|