home *** CD-ROM | disk | FTP | other *** search
- (*******************************************************)
- (* LISP.PAS *)
- (* Hauptprogramm des LittleLisp-Systems *)
- (* (C) 1988 Reinhard Häring & TOOLBOX *)
- (*******************************************************)
-
- PROGRAM LittleLisp; { MS-DOS Turbo Pascal 3.0 & 4.0 }
-
- (*$I LISPDEFS.INC *)
-
- FUNCTION eval(Exp,env:objp):objp; FORWARD;
- FUNCTION apply(proc,args,env:objp):objp; FORWARD;
-
-
- (*$I LISPIO.INC *)
-
- (*$I LISPLIST.INC *)
-
- (*$I LISPFRAM.INC *)
-
- (*$I LISPFIO.INC *)
-
- (*$I LISP.INC *)
-
- {---------------------- Main Program ---------------------}
- BEGIN
- WriteLn('LittleLisp '); WriteLn;
- New(null); null^.typ:=-1;
- p_delayed_obj:=inlist('delayed-obj');
- p_quote:=inlist('quote');
- p_define:=inlist('define'); p_set:=inlist('set!');
- p_lambda:=inlist('lambda'); p_mlambda:=inlist('mlambda');
- p_dlambda:=inlist('dlambda');
- p_procedure:=inlist('procedure');
- p_mprocedure:=inlist('mprocedure');
- p_dprocedure:=inlist('dprocedure');
- p_cond:=inlist('cond'); p_if:=inlist('if');
- p_t:=inlist('t');
- p_true:=inlist('true'); p_else:=inlist('else');
- p_begin:=inlist('begin'); p_and:=inlist('and');
- p_or:=inlist('or');
- p_let:=inlist('let'); p_delay:=inlist('delay');
- p_memo_proc:=inlist('memo-proc');
- dynamic:=FALSE;
- New(base_env); New(property);
- property:=null;
- base_env:=cons(cons(cons(inlist('nil'),
- inlist('()')),
- null),
- null);
- read_file(inlist('"sys.lsp"'));
- REPEAT
- Write('Lisp>'); ReadLn(a);
- IF a<>'exit' THEN
- WriteLn(outlist(eval(inlist(a),base_env)));
- UNTIL a='exit';
- END.
-