if (typeof module !== 'undefined') { var types = require('./types'); var readline = require('./node_readline'); var reader = require('./reader'); var printer = require('./printer'); var Env = require('./env').Env; var core = require('./core'); } // read function READ(str) { return reader.read_str(str); } // eval function qqLoop (acc, elt) { if (types._list_Q(elt) && elt.length && types._symbol_Q(elt[0]) && elt[0].value == 'splice-unquote') { return [types._symbol("concat"), elt[1], acc]; } else { return [types._symbol("cons"), quasiquote (elt), acc]; } } function quasiquote(ast) { if (types._list_Q(ast) && 0 (count xs) 0) (list 'if (first xs) (if (> (count xs) 1) (nth xs 1) (throw \"odd number of forms to cond\")) (cons 'cond (rest (rest xs)))))))"); if (typeof process !== 'undefined' && process.argv.length > 2) { repl_env.set(types._symbol('*ARGV*'), process.argv.slice(3)); rep('(load-file "' + process.argv[2] + '")'); process.exit(0); } // repl loop if (typeof require !== 'undefined' && require.main === module) { // Synchronous node.js commandline mode while (true) { var line = readline.readline("user> "); if (line === null) { break; } try { if (line) { printer.println(rep(line)); } } catch (exc) { if (exc instanceof reader.BlankException) { continue } if (exc instanceof Error) { console.warn(exc.stack) } else { console.warn("Error: " + printer._pr_str(exc, true)) } } } }