1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/janet/step1_read_print.janet
2021-04-22 08:49:40 +09:00

50 lines
774 B
Plaintext

(import ./reader)
(import ./printer)
(import ./types :as t)
(defn READ
[code-str]
(reader/read_str code-str))
(defn EVAL
[ast]
ast)
(defn PRINT
[value]
(printer/pr_str value true))
(defn rep
[code-str]
(PRINT (EVAL (READ code-str))))
# getline gives problems
(defn getstdin [prompt buf]
(file/write stdout prompt)
(file/flush stdout)
(file/read stdin :line buf))
(defn handle-error
[err]
(cond
(t/nil?* err)
(print)
##
(string? err)
(print err)
##
(print (string "Error: " (PRINT err)))))
(defn main
[& args]
(var buf nil)
(while true
(set buf @"")
(getstdin "user> " buf)
(if (= 0 (length buf))
(break)
(try
(print (rep buf))
([err]
(handle-error err))))))