Transcript Lisp2

LISP: Basic Functionality
•S-expressions
•Conses
•Lists
•Predicates
•Evaluation and quoting
•Conditional Evaluation
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
1
Lisp S-Expressions: ATOMs
Every Lisp object is either an ATOM or a CONS
Symbols and numbers are kinds of atoms:
X, APPLE, A-SYMBOL
1, 5.7, 3/5
Many other Lisp data objects are considered to be
atoms (even strings and arrays are atoms!).
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
2
Lisp S-Expressions: CONSes
Every Lisp object is either an ATOM or a CONS
A CONS represents an association or pairing of two
other Lisp objects.
(A . B)
(APPLE . RED)
(PI . 3.14159)
(X . (Y . Z))
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
3
Lisp S-Expressions: Lists
We define lists as follows:
The symbol NIL is a list; it’s the empty list.
This list is written in list notation as ( )
Any cons having the following structure is a
list,
(S1 . (S2 . ( ... (Sn . NIL) ... ) ) )
where each S1 is either an atom or a cons.
This list is written in list notation as
(S1 S2 ... Sn)
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
4
Examples of Lists
> ’(a b c d e)
(A B C D E)
> ()
NIL
> nil
NIL
> ’()
NIL
> ’(apple . (banana . (lime . nil)))
(APPLE BANANA LIME)
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
5
Predicates That Identify Lists
> (atom ’(a b c))
NIL
> (atom ’x)
T
> (consp ’(a b c))
T
> (consp ’x)
NIL
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
6
List predicates (continued)
> (listp
T
> (listp
NIL
> (consp
NIL
> (listp
T
> (consp
T
> (listp
T
’(a b c))
’x)
’()) ; NIL is not a cons.
’()) ; NIL is a list.
’(a . b))
’(a . b)) ;note listp’s limitation.
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
7
Lisp Tries to Print Conses as Lists
> ’(a . (b . c))
(A B . C)
> ’(a . nil)
(A)
> ’((a . b) . (c . d))
((A . B)C . D)
> ’((nil . nil) . (nil . nil))
((NIL)NIL)
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
8
Lisp Forms
A form is a list whose first element is a symbol
that names an operator.
If the first element names a function, then the
form is a functional form.
> (+ 1 2 3) ; a functional form
6
> (functionp #’+)
T
> (setq x 5) ; a special form
5
> (functionp #’setq) ;
Error!
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
9
Evaluation of Functional Forms
A functional form is evaluted as follows:
If there are any arguments in the form, then they
are evaluated in left-to-right order.
The number of arguments is compared with the
number permitted by the function named by the
first element of the form.
If the number is compatible, then the function is
applied to the values of the arguments.
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
10
QUOTE
Unlike functional forms, special forms are not
required to have their arguments evaluated.
QUOTE is a special form that returns its
argument unevaluated.
> (quote (+ 1 2 3))
(+ 1 2 3)
> (quote x)
X
> ’(+ 1 2 3)
(+ 1 2 3)
> ’x
X
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
11
SETQ
SETQ is a special form that evaluates its second
argument and assigns that value to the symbol
which must be its first argument.
> (setq x
6
> (setq x
18
> (setq y
(+ 1 2 3)
> (setq y
(1 2 3)
> (setq y
1
(+ 1 2 3))
(* x 3))
’(+ 1 2 3))
(rest y))
(first y))
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
12
IF
IF is a special form that evaluates its first
argument. If the result is NIL is skips its second
argument and evaluates and returns its their
element if any. If result of evaluating the first
element was not NIL, it evaluates the second
argument and returns that.
> (setq x 10)
10
> (if (> x 2) (- x 1) (+ x 1))
9
CSE 341 -- S. Tanimoto
Lisps's Basic Functionality
13