return MAL_PRINT(MAL_EVAL(READ($str), $repl_env)); } $repl_env->set(_symbol('+'), function ($a, $b) { return intval($a + $b, 10); }); $repl_env->set(_symbol('-'), function ($a, $b) { return intval($a - $b, 10); }); $repl_env->set(_symbol('*'), function ($a, $b) { return intval($a * $b, 10); }); $repl_env->set(_symbol('/'), function ($a, $b) { return intval($a / $b, 10); }); // repl loop do { try { $line = mal_readline("user> "); if ($line === NULL) { break; } if ($line !== "") { print rep($line) . "\n"; } } catch (BlankException $e) { continue; } catch (Exception $e) { echo "Error: " . $e->getMessage() . "\n"; echo $e->getTraceAsString() . "\n"; } } while (true);
}, 'keyword' => function () { return call_user_func_array('_keyword', func_get_args()); }, 'keyword?' => function ($a) { return _keyword_Q($a); }, 'string?' => function ($a) { return _string_Q($a); }, 'pr-str' => function () { return call_user_func_array('pr_str', func_get_args()); }, 'str' => function () { return call_user_func_array('str', func_get_args()); }, 'prn' => function () { return call_user_func_array('prn', func_get_args()); }, 'println' => function () { return call_user_func_array('println', func_get_args()); }, 'readline' => function ($a) { return mal_readline($a); }, 'read-string' => function ($a) { return read_str($a); }, 'slurp' => function ($a) { return file_get_contents($a); }, '<' => function ($a, $b) { return $a < $b; }, '<=' => function ($a, $b) { return $a <= $b; }, '>' => function ($a, $b) { return $a > $b; }, '>=' => function ($a, $b) { return $a >= $b; }, '+' => function ($a, $b) { return intval($a + $b, 10); }, '-' => function ($a, $b) {