PDP-10 Maclisp
The ITS Lisp is called Maclisp, or PDP-10 Maclisp if necessary to disambiguate it against Multics Maclisp. Its direct ancestor is PDP-6 LISP.
The biggest difference between Multics Maclisp is PDP-10 version does not have “real” string data type, the PDP-10 Maclisp string is just a symbol with a special property been set. The good news is the format
pretty printer function is still available to build strings with complex contents.
A sample MACLISP session on ITS using LEDIT MODE in EMACS LEDIT will work on both ITS and TOPS-20 ;tnx1.0e6 to GLS
KA ITS 1648 DDT 1547 TTY 52 ;System herald :login smith ;The luser logs in :lisp ;MACLISP is started LISP 2154 ;MACLISP version ALLOC? N ;Take the world defaults (plus 3.14 2.71) ;Add two numbers 5.85 (car '(simple list)) ;Return the CAR of a LIST SIMPLE (ledit) ;Enters EMACS in LEDIT MODE (defun sum-squares (a b) ;Typed into the EMACS buffer (plus (times a a (times b b)))) ;META-Z pushes DEFUN to the world ;CTRL-X Z returns to LISP ;READING FROM LEDIT SUN-SQUARES ;Back in LISP ;EDIT COMPLETED (sum-squares 2.0 3.0) ;call SUM-SQUARES 36.0 ;Returns the wrong number (ledit) ;Re-enter EMACS in LEDIT MODE CTRL-S (times a a ;Typed into EMACS ;Search for STRING (times a a (defun sum-squares (a b) ;Correct SUM-SQUARES (plus (times a a) (times b b))) ;META-Z pushes new DEFUN to world ;CTRL-X Z returns to LISP ;READING FROM LEDIT SUM-SQUARES ;Back in LISP ;EDIT COMPLETED (sum-squares 2.0 3.0) ;Call SUM-SQUARES again 13.0 ;Correct result
The LISP … Editor … LISP … loop will no doubt be repeated many times.
HELLO WORLD and LOOP examples
@maclisp ; start MACLISP at the TOPS-20 EXEC LISP 2122 ; MACLISP Version 2122 Alloc? n ; take the defaults * (defun HELLO () ; DEFINE FUNCTION "HELLO" (princ "Hello World!")) ; print characters "Hello World!" HELLO ; MACLISP reports a definition for the function "HELLO" (hello)Hello World! ; The function "HELLO" is called and "Hello World!" is printed T ; MACLISP reports T for a successful function call
@maclisp LISP 2122 Alloc? n * (loop for x in '(a b c d e) ; Call the macro "LOOP" for VARIABLE "x" in a list of "a b c d e" do (print x)) ; DO a PRINT of the value of "x" ;Loading LOOP 725 ; MACLISP loads LOOP version 725 ;Loading DEFMAX 98 ; MACLISP loads DEFMAX version 98 A ; 1. X = A B ; 2. X = B C ; 3. X = C D ; 4. X = D E ; 5. X = E NIL ; DO called PRINT X which returned NIL because there was nothing ; left to PRINT in the list of "a b c d e"
MATH examples
@maclisp LISP 2122 Alloc? n * (+ 2 2) 4 (- 2 2) 0 (* 2 2) 4