123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % PASCAL BASED MINI-LISP
- %
- % File: PAS1.RED - Basic I/O Functions
- % ChangeDate: 10:48pm Wednesday, 15 July 1981
- % By: M. L. Griss
- % Change to add Features for Schlumberger Demo
- %
- % All RIGHTS RESERVED
- % COPYRIGHT (C) - 1981 - M. L. GRISS
- % Computer Science Department
- % University of Utah
- %
- % Do Not distribute with out written consent of M. L. Griss
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Additional Support procedures for optimized code;
- SYMBOLIC PROCEDURE CAAR(X);
- CAR CAR X;
- SYMBOLIC PROCEDURE CADR X;
- CAR CDR X;
- SYMBOLIC PROCEDURE CDAR X;
- CDR CAR X;
- SYMBOLIC PROCEDURE CDDR X;
- CDR CDR X;
- % All Friendly CxxxR's
- SYMBOLIC PROCEDURE CAAAAR X; CAR CAR CAR CAR X;
- SYMBOLIC PROCEDURE CAAADR X; CAR CAR CAR CDR X;
- SYMBOLIC PROCEDURE CAADAR X; CAR CAR CDR CAR X;
- SYMBOLIC PROCEDURE CAADDR X; CAR CAR CDR CDR X;
- SYMBOLIC PROCEDURE CADAAR X; CAR CDR CAR CAR X;
- SYMBOLIC PROCEDURE CADADR X; CAR CDR CAR CDR X;
- SYMBOLIC PROCEDURE CADDAR X; CAR CDR CDR CAR X;
- SYMBOLIC PROCEDURE CADDDR X; CAR CDR CDR CDR X;
- SYMBOLIC PROCEDURE CDAAAR X; CDR CAR CAR CAR X;
- SYMBOLIC PROCEDURE CDAADR X; CDR CAR CAR CDR X;
- SYMBOLIC PROCEDURE CDADAR X; CDR CAR CDR CAR X;
- SYMBOLIC PROCEDURE CDADDR X; CDR CAR CDR CDR X;
- SYMBOLIC PROCEDURE CDDAAR X; CDR CDR CAR CAR X;
- SYMBOLIC PROCEDURE CDDADR X; CDR CDR CAR CDR X;
- SYMBOLIC PROCEDURE CDDDAR X; CDR CDR CDR CAR X;
- SYMBOLIC PROCEDURE CDDDDR X; CDR CDR CDR CDR X;
- SYMBOLIC PROCEDURE CAAAR X; CAR CAR CAR X;
- SYMBOLIC PROCEDURE CAADR X; CAR CAR CDR X;
- SYMBOLIC PROCEDURE CADAR X; CAR CDR CAR X;
- SYMBOLIC PROCEDURE CADDR X; CAR CDR CDR X;
- SYMBOLIC PROCEDURE CDAAR X; CDR CAR CAR X;
- SYMBOLIC PROCEDURE CDADR X; CDR CAR CDR X;
- SYMBOLIC PROCEDURE CDDAR X; CDR CDR CAR X;
- SYMBOLIC PROCEDURE CDDDR X; CDR CDR CDR X;
- symbolic procedure prin2(x);
- begin
- if pairp(x) then
- << wrtok( '!( );
- while pairp(x) do
- << prin2 car(x);
- x := cdr x;
- if not eq(x,NIL) then wrtok('! ); % A space.
- >>;
- if not eq(x,NIL) then
- << wrtok( '!.! ); %Period followed by space.
- prin2(x);
- >>;
- wrtok( '!) );
- >>
- else
- wrtok(x);
- end;
- symbolic procedure revx(l1,l2);
- % Non-destructive reverser, adds reverse of l1 to front of l2.
- begin
- while pairp(l1) do
- << l2 := (car l1).l2;
- l1 := cdr l1;
- >>;
- if not null (l1) then l2 := l1 . l2;
- return l2;
- end;
- symbolic procedure rev(l1);
- revx(l1,NIL);
- % EOF code is Ascii Z plus an offset of 1, much too obscure!.
- symbolic procedure eofp(x);
- if atom(x) and (!*inf(x) eq 27) then 'T else 'NIL;
- symbolic procedure read();
- begin scalar itm,ii;
- itm := rdtok();
- if not(toktype eq 3) or eofp(itm) then return(itm); % Over cautious;
- if (itm eq '!( )
- then return rlist()
- else if (itm eq '!' ) % Treat quote mark as QUOTE.
- then return <<ii := read();
- if eofp(ii) then ii
- else ('QUOTE . ii . NIL)>>
- else return itm;
- end;
- symbolic procedure rlist();
- % Non destructive READ of S-expr, including ".".
- begin scalar itm,lst,done,last;
- itm := read();
- if eofp(itm) then return itm;
- done := NIL;
- while not done do
- if itm eq '!) and toktype eq 3
- then done :='T
- else if itm = '!. and toktype eq 3
- then <<done:='T; last:= car rlist()>> %CAR cures bug? WFG
- else
- <<lst := itm.lst; itm := read()>>;
- % ??? if pairp last then last:=car last>>;
- if eofp(itm) then return itm;
- return revx(lst,last);
- end;
- END$
|