home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 01 / levelki / lisp.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-09-29  |  1.7 KB  |  58 lines

  1. (*******************************************************)
  2. (*                      LISP.PAS                       *)
  3. (*         Hauptprogramm des LittleLisp-Systems        *)
  4. (*          (C) 1988 Reinhard Häring & TOOLBOX         *)
  5. (*******************************************************)
  6.  
  7. PROGRAM LittleLisp;  { MS-DOS Turbo Pascal 3.0 & 4.0 }
  8.  
  9. (*$I LISPDEFS.INC *)
  10.  
  11. FUNCTION eval(Exp,env:objp):objp; FORWARD;
  12. FUNCTION apply(proc,args,env:objp):objp; FORWARD;
  13.  
  14.  
  15. (*$I LISPIO.INC   *)
  16.  
  17. (*$I LISPLIST.INC *)
  18.  
  19. (*$I LISPFRAM.INC *)
  20.  
  21. (*$I LISPFIO.INC  *)
  22.  
  23. (*$I LISP.INC     *)
  24.  
  25. {---------------------- Main Program ---------------------}
  26. BEGIN
  27.   WriteLn('LittleLisp  '); WriteLn;
  28.   New(null); null^.typ:=-1;
  29.   p_delayed_obj:=inlist('delayed-obj');
  30.   p_quote:=inlist('quote');
  31.   p_define:=inlist('define'); p_set:=inlist('set!');
  32.   p_lambda:=inlist('lambda'); p_mlambda:=inlist('mlambda');
  33.   p_dlambda:=inlist('dlambda');
  34.   p_procedure:=inlist('procedure');
  35.   p_mprocedure:=inlist('mprocedure');
  36.   p_dprocedure:=inlist('dprocedure');
  37.   p_cond:=inlist('cond'); p_if:=inlist('if');
  38.   p_t:=inlist('t');
  39.   p_true:=inlist('true'); p_else:=inlist('else');
  40.   p_begin:=inlist('begin'); p_and:=inlist('and');
  41.   p_or:=inlist('or');
  42.   p_let:=inlist('let'); p_delay:=inlist('delay');
  43.   p_memo_proc:=inlist('memo-proc');
  44.   dynamic:=FALSE;
  45.   New(base_env); New(property);
  46.   property:=null;
  47.   base_env:=cons(cons(cons(inlist('nil'),
  48.                            inlist('()')),
  49.                       null),
  50.                  null);
  51.   read_file(inlist('"sys.lsp"'));
  52.   REPEAT
  53.     Write('Lisp>'); ReadLn(a);
  54.     IF a<>'exit' THEN
  55.       WriteLn(outlist(eval(inlist(a),base_env)));
  56.   UNTIL a='exit';
  57. END.
  58.