Standard LISP (reprint)

When it was first formulated in 1960, (1) the programming language LISP was a truly machine independent language. However, even the earliest computer implementation encountered problems in input-output control and the handling of free variables which were not considered in the original paper. Successive implementations of LISP on more sophisticated machines have solved such problems by independent methods and introduced extensions of the language peculiar to those machines. Consequently, a LISP user now faces considerable difficulty in moving a program from one machine to another and is often involved in weeks of debugging in the process. As a possible solution to this problem, this paper is an attempt to provide a uniform subset of LISP 1.5 and its variants as it exists today. The version of LISP described, which we call Standard LISP, is sufficiently restricted in form so that programs written in it can run under any LISP system upwardly compatible with LISP 1.5 as described in the LISP 1.5 Programmer's Manual (2). As function names vary from system to system and input-output control is different, some modification of the code is of course necessary before function definitions can be successfully compiled in any given system. However, this modification is performed automatically by a preprocessor, whloh is custom built for a particular system. This preprocessor is a LISP program which is loaded before any Standard LISP programs are run, and could be built automatically into a system if only Standard LISP programs are run. Parts of this preprocessor are similar for all systems, but some of it is peculiar to a given implementation. Standard LISP preprocessors have been written for SHARE LISP for the IBM 7090 series machines, Stanford LISP/360 for IBM System 360 machines, Stanford AI LISP 1.6 for the PDP-6 and PDP-10, BBN-LISP for the SDS 940 and Texas LISP for the CDC 6600. For convenience in exposition we shall refer to the first four systems as SHARE LISP, LISP/360, PDP LIST and BBN-LISP respectively.