1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-21 02:27:10 +03:00
mal/yorick/step1_read_print.i
2017-09-22 21:16:55 +00:00

44 lines
741 B
OpenEdge ABL

set_path, get_env("YORICK_MAL_PATH") + ":" + get_path()
require, "reader.i"
require, "printer.i"
func READ(str)
{
return read_str(str)
}
func EVAL(exp, env)
{
if (structof(exp) == MalError) return exp
return exp
}
func PRINT(exp)
{
if (structof(exp) == MalError) return exp
return pr_str(exp, 1)
}
func REP(str)
{
return PRINT(EVAL(READ(str), ""))
}
func main(void)
{
stdin_file = open("/dev/stdin", "r")
while (1) {
write, format="%s", "user> "
line = rdline(stdin_file, prompt="")
if (!line) break
if (strlen(line) > 0) {
result = REP(line)
if (structof(result) == MalError) write, format="Error: %s\n", result.message
else write, format="%s\n", result
}
}
write, ""
}
main;