Artifact ebfd457f65a86f8f73e944390e79da1abd80f199efa67aec7743a52d05d48fb0:
- File
r35/cslsrc/cslprolo.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 2026) [annotate] [blame] [check-ins using] [more...]
% module prolog; % CSL dependent code for REDUCE. % Author: Anthony C. Hearn. % This file defines functions, variables and declarations needed to % make REDUCE and the underlying CSL system compatible, and which need % to be input before the system independent REDUCE source is loaded. % The following line is done this way for bootstrapping. if getd 'create!-package then create!-package('(prolog),'(rlisp)); symbolic procedure evload l; % This is coded out as an explicit loop because it is processed rather % early in the bootstrap sequence, and the nicer syntax I might prefer to use % may not be stable... begin top: if null l then return nil; load!-module car l; l := cdr l; go to top end; % % Well you might wonder... this is in cslprolo.red AND in cslrend.red. % The reason is that it is needed early if rlisp is to be patchable. It % is needed AFTER rlisp.red has been loaded because the first time in the % bootstrap-build that RLISP is loaded no attention is given to LOSE % properties (this is a REAL misery) so the definition must be put in % place on top of the incorrect one builty by RLISP the first time % around. % remflag('(copyd), 'lose); symbolic procedure copyd(new,old); % Copy the function definition from old id to new. begin scalar x; x := getd old; % If loading with !*savedef = '!*savedef then the actual definitions % do not get loaded, but the source forms do... if null x then progn( if not (!*savedef = '!*savedef) then rerror('rlisp,1,list(old,"has no definition in copyd")) ) else progn(putd(new,car x,cdr x), if flagp(old, 'lose) then flag(list new, 'lose) ); % The transfer of the saved definition is needed if the REDUCE "patch" % mechanism is to work fully properly. if (x := get(old, '!*savedef)) then put(new, '!*savedef, x); return new end; flag('(copyd), 'lose); flag('(atsoc copy eqcar gcdn geq leq mkquote neq reversip rplacw), 'lose); !*argnochk := t; % endmodule; end;