Update Crystal implementation
[jackhill/mal.git] / crystal / step1_read_print.cr
CommitLineData
fdf28b76 1#! /usr/bin/env crystal run
2
5185c56e 3require "readline"
fdf28b76 4require "./reader"
5require "./printer"
6
7# Note:
8# Employed downcase names because Crystal prohibits uppercase names for methods
9
97d0deb1 10module Mal
11 extend self
fdf28b76 12
97d0deb1 13 def read(str)
14 read_str str
15 end
fdf28b76 16
97d0deb1 17 def eval(x)
5185c56e 18 x
97d0deb1 19 end
20
21 def print(result)
22 pr_str(result, true)
23 end
fdf28b76 24
97d0deb1 25 def rep(str)
26 print(eval(read(str)))
27 end
fdf28b76 28end
29
5185c56e 30while line = Readline.readline("user> ", true)
afc3a8d5 31 begin
97d0deb1 32 puts Mal.rep(line)
afc3a8d5 33 rescue e
34 STDERR.puts e
35 end
fdf28b76 36end