home *** CD-ROM | disk | FTP | other *** search
- (*******************************************************)
- (* LISPFRAM.INC *)
- (* Include-Modul des LittleLisp-Systems *)
- (* (C) 1988 Reinhard Häring & TOOLBOX *)
- (*******************************************************)
-
- {-- Frames & Environments ---------------------}
-
- FUNCTION build_in(x:objp):BOOLEAN;
-
- VAR t:INTEGER;
- n:string20;
-
- BEGIN
- t:=x^.typ;
- IF t<>2 THEN
- build_in:=FALSE
- ELSE BEGIN
- n:=x^.s^;
- build_in:= (n='access') OR (n='set') OR (n='def')
- OR (n='extend-env') OR (n='proc-env')
- OR (n='the-env') OR (n='eval')
- OR (n='apply') OR (n='dynamic')
- OR (n='lexical') OR (n='dynamic?')
- OR (n='newline') OR (n='null?')
- OR (n='atom?') OR (n='integer?')
- OR (n='pair?') OR (n='inlist')
- OR (n='outlist') OR (n='map')
- OR (n='number?') OR (n='string?')
- OR (n='car') OR (n='cdr') OR (n='caar')
- OR (n='cddr') OR (n='cdar') OR (n='cadr')
- OR (n='list') OR (n='cons') OR (n='equal')
- OR (n='equal?') OR (n='eq') OR (n='not')
- OR (n='eq?') OR (n='assoc')
- OR (n='delayed?') OR (n='bound?')
- OR (n='symbol?') OR (n='+') OR (n='-')
- OR (n='*') OR (n='/') OR (n='=') OR (n='>')
- OR (n='<') OR (n='>=') OR (n='<=')
- OR (n='<>') OR (n='bound-in-frame?')
- OR (n='read') OR (n='print')
- OR (n='read-file') OR (n='append')
- OR (n='member') OR (n='length')
- OR (n='proplist') OR (n='begin')
- OR (n='setcar!') OR (n='setcdr!')
- OR (n='property') OR (n='put')
- OR (n='get') OR (n='rem') OR (n='strlen')
- OR (n='strcopy') OR (n='concat')
- OR (n='proc-def')
- END;
- END;
-
- FUNCTION make_frame(vars,values:objp):objp;
- BEGIN
- IF 2=vars^.typ THEN
- make_frame:=cons(cons(vars,values),null)
- ELSE IF nullp(vars) AND nullp(values) THEN
- make_frame:=null
- ELSE IF nullp(vars) OR nullp(values) THEN
- error('make_frame error - '+outlist(vars)
- +' - '+outlist(values))
- ELSE
- make_frame:=cons(cons(car(vars),car(values)),
- make_frame(cdr(vars),cdr(values)));
- END;
-
-
- FUNCTION binding_in_env(va,env:objp):objp;
- VAR b:objp;
- BEGIN
- binding_in_env:=null;
- IF nullp(env) THEN
- IF build_in(va) THEN
- binding_in_env:=cons(va,va)
- ELSE
- ELSE BEGIN
- b:=assoc(va,car(env));
- IF NOT nullp(b) THEN binding_in_env:=b
- ELSE binding_in_env:=binding_in_env(va,cdr(env));
- END;
- END;
-
-
- FUNCTION lookup_variable_value(va,env:objp):objp;
- VAR b:objp;
- BEGIN
- b:=binding_in_env(va,env);
- IF NOT nullp(b) THEN lookup_variable_value:=cdr(b)
- ELSE error('Unbound Var: '+outlist(va));
- END;
-
-
- FUNCTION extend_environment(vars,values,base:objp):objp;
- BEGIN
- extend_environment:=cons(make_frame(vars,values),base);
- END;
-
-
- FUNCTION set_variable_value(va,Val,env:objp):objp;
- VAR b:objp;
- BEGIN
- set_variable_value:=null;
- b:=binding_in_env(va,env);
- IF NOT nullp(b) THEN set_variable_value:=setcdr(b,Val)
- ELSE error('Unbound-Variable in set: '+outlist(va));
- END;
-
-
- FUNCTION define_variable(va,Val,env:objp):objp;
- VAR b:objp;
- BEGIN
- b:=assoc(va,car(env));
- IF NOT nullp(b) THEN define_variable:=setcdr(b,Val)
- ELSE define_variable:=setcar(env,cons(cons(va,Val),
- car(env)));
- END;
-