MTS 8: LISP and SLIP in MTS
June 1976
function (READ) is called, and returns one S-expression which it reads
from the system input device, SCARDS.
Program Description (in an algebraic-type programming language)
RESTLIST = ((READ-IN-ARGUMENT . 0));
DO WHILE RESTLIST ¬= NIL;
LIST = (CAAR RESTLIST);
DEPTH = (CDAR RESTLIST);
RESTLIST = (CDR RESTLIST);
IF (LIST IS ATOM) THEN DO;
PRINT "ATOM" ":" LIST ", DEPTH" DEPTH;
END;
ELSE DO;
TEMP = (CAR LIST);
LIST = (CDR LIST);
IF LIST ¬= NIL THEN
RESTLIST = (CONS (CONS LIST DEPTH) RESTLIST);
ELSE;
RESTLIST = (CONS (CONS TEMP DEPTH+1) RESTLIST);
END;
END;
Program:
(PROG (LIST DEPTH TEMP RESTLIST)
(SETQ RESTLIST (LIST (CONS (READ) 0)) )
A (COND
((NOT RESTLIST) (RETURN ’DONE))
(T (SETQ LIST (UNCONS (UNCONS RESTLIST
RESTLIST ) DEPTH))
(COND ((ATOM LIST)
(MAPC ’PRIN1 (LIST ’ATOM ’: LIST ’"," ’DEPTH DEPTH))
(TERPRI))
(T (SETQ TEMP (UNCONS LIST LIST))
(COND (LIST
(SETQ RESTLIST (CONS(CONS LIST DEPTH) RESTLIST))))
(SETQ RESTLIST (CONS (CONS TEMP
(ADD1 DEPTH)) RESTLIST))
))))
(GO A))
Recursive Implementation of the Same Program:
(PROG NIL (
(LABEL ATOMPRINT (LAMBDA (RESTLIST)
(COND ((NOT RESTLIST) (RETURN ’DONE))
((ATOM (CAAR RESTLIST)) (MAPC ’PRIN1
(LIST ’ATOM ’: (CAAR RESTLIST)
’"," ’DEPTH (CDAR RESTLIST)))
(TERPRI)
(ATOMPRINT (CDR RESTLIST)))
( T (ATOMPRINT (GRAFT
34 LISP