Merge pull request #194 from dubek/literal-empty-list
[jackhill/mal.git] / objpascal / step0_repl.pas
CommitLineData
0067158f
JM
1program Mal;
2
bc6a1f15
JM
3{$H+} // Use AnsiString
4
0067158f 5Uses CMem,
bc6a1f15 6 mal_readline;
0067158f
JM
7
8var
9 Repl_Env: string = '';
bc6a1f15 10 Line : string;
0067158f
JM
11
12// read
13function READ(const Str: string) : string;
14begin
15 READ := Str;
16end;
17
18// eval
19function EVAL(Ast: string; Env: string) : string;
20begin
21 EVAL := Ast;
22end;
23
24// print
25function PRINT(Exp: string) : string;
26begin
27 PRINT := Exp;
28end;
29
30// repl
31function REP(Str: string) : string;
32begin
33 REP := PRINT(EVAL(READ(Str), Repl_Env));
34end;
35
36begin
37 while True do
38 begin
bc6a1f15
JM
39 try
40 Line := _readline('user> ');
41 if Line = '' then continue;
42 WriteLn(REP(Line))
43 except
44 On E : MalEOF do Halt(0);
45 end;
0067158f
JM
46 end;
47end.