PSL Manual 7 February 1983 Introduction
section 1.0 page 1.1
CHAPTER 1
CHAPTER 1
CHAPTER 1
INTRODUCTION
INTRODUCTION
INTRODUCTION
1.1. Opening Remarks . . . . . . . . . . . . . . 1.1
1.2. Scope of the Manual . . . . . . . . . . . . . 1.2
1.2.1. Typographic Conventions within the Manual . . . 1.2
1.2.2. The Organization of the Manual . . . . . . . 1.3
1.1. Opening Remarks
1.1. Opening Remarks
1.1. Opening Remarks
1
This document describes PSL (PORTABLE STANDARD LISP ), a portable,
"modern" LISP developed at the University of Utah for a variety of
machines. PSL is upward-compatible with STANDARD LISP [Marti 79]. In most
cases, STANDARD LISP did not commit itself to specific implementation
details (since it was to be compatible with a portion of "most" LISPs).
PSL is more specific and provides many more functions than described in
that report.
The goals of PSL include:
- Providing implementation tools for LISP that can be used to
____
implement a variety of LISP-like systems, including mini-lisps
embedded in other language systems (such as existing PASCAL or
ADA applications).
- Effectively supporting the REDUCE algebra system on a number of
machines, and providing algebra modules extracted from (or
modeled upon) REDUCE to be included in applications such as CAI
and CAGD.
- Providing a uniform, modern LISP programming environment on all
of the machines that we use (DEC-20, VAX, and 68000 based
personal machines)--of the power of FRANZ LISP, UCI LISP or
MACLISP.
- Studying the utility of a LISP-based systems language for other
applications (such as CAGD or VLSI design) in which SYSLISP code
provides efficiency comparable to that of C or BCPL, yet enjoys
_______________
1
"LSP" backwards!
Introduction 7 February 1983 PSL Manual
page 1.2 section 1.1
the interactive program development and debugging environment of
LISP.
1.2. Scope of the Manual
1.2. Scope of the Manual
1.2. Scope of the Manual
This manual is intended to describe the syntax, semantics, and
implementation of PSL. While we have attempted to make it comprehensive,
it is not intended for use as a primer. Some prior exposure to LISP will
prove very helpful. A selection of LISP primers is listed in the
bibliography in Chapter 23; see for example [Allen 79, Charniak
80, Weissman 67, Winston 81].
1.2.1. Typographic Conventions within the Manual
1.2.1. Typographic Conventions within the Manual
1.2.1. Typographic Conventions within the Manual
A large proportion of this manual is devoted to descriptions of the
functions that make up PSL. Each function is provided with a prototypical
header line. Each argument is given a name and followed by its allowed
type. If an argument type is not commonly used, it may be a specific set
PutD
PutD
enclosed in brackets {...}. For example, this header shows that PutD
(which defines other functions) takes three arguments:
____
____
____
PutD expr
PutD _____ __ ____ _____ ____ ______ ____ _______ _____ __ expr
(PutD FNAME:id TYPE:ftype BODY:{lambda, code-pointer}): FNAME:id expr
_____ __
1. FNAME, which is an id (identifier).
____
2. TYPE, which is the "function type" of the function being
defined.
____ ______ ____ _______
3. BODY, which is a lambda expression or a code-pointer.
_____
and returns FNAME, the name of the function being defined. Some functions
are compiled open; these have a note saying "open-compiled" next to the
function type.
Some functions accept an arbitrary number of arguments. The header for
these functions shows a single argument enclosed in square brackets--
indicating that zero or more occurrences of that argument are allowed. For
example:
And
And _ ____ _____ _______
(And [U:form]): extra-boolean
And
And
And is a function which accepts zero or more arguments each of which may
____
be any form.
In some cases, LISP or RLISP code is given in the function documentation
as the function's definition. As far as possible, the code is extracted
from the the current PSL sources (perhaps converted from one syntax to the
other); however, this code is not always necessarily actually used in PSL,
and may be given only to clarify the semantics of the function. Please
_____
check carefully if you depend on the exact definition.
PSL Manual 7 February 1983 Introduction
section 1.2 page 1.3
Some features of PSL are anticipated but not yet fully implemented. When
these are documented in this manual they are indicated with the words:
___ ___________ ___
___ ___________ ___
___ ___________ ___
[not implemented yet]
[not implemented yet]
[not implemented yet].
1.2.2. The Organization of the Manual
1.2.2. The Organization of the Manual
1.2.2. The Organization of the Manual
This manual is arranged in separate chapters, which are meant to be
self-contained units. Each begins with a small table of contents serving
as a summary of constructs and as an aid in skimming. Here is a brief
overview of the following chapters:
Chapter 2 is particularly useful for those using PSL for the first time.
It begins with directions for starting PSL and getting help. It also
briefly discusses the handling of errors; some of the consequences of PSL
being both a compiled and an interpreted language; function types; switches
and globals. PSL treats the parameters for various function types rather
differently from a number of other dialects, and the serious user should
definitely become familiar with this information.
While most LISP implementations use only a fully parenthesized syntax,
PSL gives the user the option of using an ALGOL-like (or PASCAL-like)
syntax (RLISP), which many users prefer. Chapter 3 describes the syntax of
RLISP.
Chapter 4 describes the data types used in PSL. It includes functions
useful for testing equality and for changing data types, and predicates
useful with data types.
The next seven chapters describe in detail the basic functions provided
by PSL.
Chapters 5, 6, 7, and 8 describe functions for manipulating the basic
______ __ ____ ______ ______
data structures of LISP: numbers, ids, lists, and strings and vectors. As
_______ __________ ____
virtually every LISP program uses integers, identifiers, and lists
extensively, these three chapters (5, 6 and 7) should be included in an
______ ______
overview. As vectors and strings are used less extensively, Chapter 8 may
be skipped on a first reading.
Chapter 9 and, to some extent, Chapter 4 describe the basic functions
used to drive a computation. The reader wanting an overview of PSL should
certainly read these two.
Chapter 10 describes functions useful in function definition and the idea
of variable binding. The novice LISP user should definitely read this
information before proceeding to the rest of the manual. Also described
here is a proposed scheme for context-switching in the form of the funarg
and closures.
Chapter 11 describes functions associated with the interpreter. It
Eval Apply
Eval Apply
includes functions having to do with evaluation (Eval and Apply.)
Introduction 7 February 1983 PSL Manual
page 1.4 section 1.2
Chapter 12 describes the I/O facilities. Most LISP programs do not
require sophisticated I/O, so this may be skimmed on a first reading. The
section dealing with input deals extensively with customizing the scanner
and reader, which is only of interest to the sophisticated user.
Chapter 13 presents information about the user interface for PSL. It
includes some generally useful information on running the system.
Chapter 14 discusses error handling. Much of the information is of
interest primarily to the sophisticated user. However, LISP provides a
convenient interactive facility for correcting certain errors which may be
of interest to all, so a first reading should include parts of this
chapter.
Chapter 15 discusses some tools for debugging and statistics gathering
based on the concept of embedding function definitions.
Chapter 16 describes the structure editor, which permits the user to
construct and modify list structure, including the bodies of interpreted
functions, and erroneous expressions within the BREAK loop. It also
describes EMODE, an EMACS-like screen editor.
Chapter 17 briefly describes modules of useful tools. This includes the
PSL cross-reference generator, and various tools for defining macros.
The rest of the manual may be skipped on first reading.
Chapter 18 describes functions associated with the compiler. Chapter
19 describes some functions for communicating with the TOPS-20 and UNIX
operating systems. Chapter 20 describes SYSLISP, a language incorporating
features from both BCPL and LISP and which is used as an implementation
language for PSL. Chapter 21 presents details of the portable
implementation which may be of interest to sophisticated users, including a
description of the garbage collector. Chapter 22 describes the extensible
parser. Section 22.4 provides BNF descriptions of the input accepted by
the token scanner, standard reader, and syntactic (RLISP) reader.
Chapter 23 contains the bibliography.
Chapter 24 is an alphabetical index of concepts. Chapter 25 is an
alphabetical index of all functions defined in the manual. Chapter
26 contains an alphabetical index of all global variables and switches
defined in the manual.