Information (cont.) References ANSI Common LISP, by Paul
Graham, Prentice Hall, 1995. (A good introductory book) LISP, by
Patrick Henry Winston and Bertbold Klaus Paul Horn, Addison Wesley,
1989. (A quick guide to write Lisp) Introduction to functional
programming, by Richard Bird and Philip Wadler, Prentice-Hall,
1988. Functional programming, by Jeroen Fokker, 1995. (Free for
educational purposes) 3
Slide 4
Information (cont.) Grade Homework: 30% Midterm exam: 30% Final
project: 40% "I can do everything through him who gives me strength
Phillipians 4:13 4
Slide 5
Syllabus Introduction Lists Specialized Data Structures Control
Functions Input and output Symbols Numbers Macros Structure 5
Slide 6
Introduction-Functional Programming Computers are expensive in
early days make the programming language resemble the computer
architecture imperative programming e.g. Pascal, C, Statement 1;
Statement 2; Statement 3; Statement n; 6
Slide 7
Introduction-Functional Programming There were already methods
to solve problems before the invention of computers Functions play
a much more central roles Function Expresses the connection between
parameters (input) and the result (output) Is a good way of
specifying a computation 7 InputOutput Function Result=f(parameter
1, parameter 2, , parameter p)
Slide 8
Introduction-Functional Programming A functional program
consists of the definition of one or more functions 8 Function 1
Function 2 Function 3 Function n
Slide 9
Introduction-Lisp Lisp was first conceived by John McCarthy in
1956 The first functional programming language Not the language
satisfies all modern demands Other functional programming languages
came to existence for different purposes ML Scheme (an adjustment
to Lisp) Haskell Designed to evolve You can use Lisp to define new
lisp operators 9
Slide 10
Introduction-Lisp Example 10 ; Lisp /* C */ (defun sum (n) int
sum(int n){ (let ((s 0)) int i, s = 0; (dotimes (i n s) for (i = 0;
i < n; i++) (incf s i ) ) ) ) s += i; return(s); }
Introduction-Lisp An interactive front-end (toplevel) > is
the toplevel prompt > 1 (you type 1) 1 (the system print its
value evaluate to itself) > (another prompt to say that its
ready for more) > (+ 2 3) 5 + is the operator The numbers 2 and
3 are arguments Prefix notation 2 + 3 + 4 ? 12
Introduction-Atoms and Lists Expressions can be nested > (/
(-7 1) (- 4 2)) ? Lisp uses a single notation to express all ideas
Atom List 14
Slide 15
Introduction-Evaluation (+ 2 3) + is a function 2 and 3 are
arguments (+ 2 3) is a function call Function evaluation 1: the
arguments are evaluated, from left to right 2: the values of the
arguments are passed to the function named by the operator 15
Slide 16
Introduction-Evaluation (/ (- 7 1) (- 4 2)) 1: evaluate (- 7 1)
1.1: evaluate 7 1.2: evaluate 1 1.3: pass 7 and 1 to the function
-, which returns 6 2: evaluate (- 4 2) 2.1: evaluate 4 2.2:
evaluate 2 2.3: pass 4 and 2 to the function -, which returns 2 3:
pass 6 and 2 to the function /, which returns 3 16
Slide 17
Introduction-Evaluation > (/ 1 0) Error: Division by zero.
> (quote (+ 3 5)) (+ 3 5) > (+ 3 5) (+ 3 5) Quote takes a
single argument and just returns it verbatim A way to protect
expressions from evaluation 17
Slide 18
Introduction-Data Lisp offers all the data types we find in
most other languages Integer e.g. 256 String e.g ora et labora
Special data type Symbol Word List Is represented zero or more
elements enclosed in parentheses 18
Slide 19
Introduction-Data Symbol Does not evaluate to itself If you
want to refer to a symbol, you should quote it > Artichoke
ARTICHOKE List The elements can be of any type, including lists You
have to quote lists, or lisp would take them for functions calls
> (my 3 Sons) (MY 3 Sons) > (the list (a b c) has 3 elements)
(THE LIST (a b c) HAS 3 ELEMENTS) One quote protects a whole
expression 19
Slide 20
Introduction-Data Build lists by calling list > (list my (+
2 1) Sons) (MY 3 Sons) The list is evaluated to return The list
itself if it is quoted Its value if it is not quoted > (list (+
2 1) (+ 2 1)) ((+ 2 1) 3) Lisp programs are expressed as lists You
can write programs to generate programs 20
Slide 21
Introduction-Data Empty list > ( ) NIL nil NIL You dont have
to quote nil because nil evaluates to itself 21
Slide 22
Introduction-List Operators Cons (cons ) > (cons a (b c d))
(A B C D) > (cons a (cons b nil)) (A B) > (list a b) (A B)
22
Slide 23
Introduction-List Operators First > (first (fast computers
are nice)) FAST Rest > (rest (fast computers are nice))
(COMPUTERS ARE NICE) Car > (car (a b c)) A > (cdr (a b c)) (B
C) > (car (cdr (cdr (a b c d)))) C Cxxxxr x is a or d 23
Slide 24
Introduction-Truth The symbol t is the default representation
for truth Like nil, t evaluates to itself (listp object) Returns
true when object is a list > (listp (a b c)) T > (listp 27)
NIL A function whose return value is intended to be interpreted as
truth or falsity is called a predicate Common Lisp predicates often
have names that end with p 24
Slide 25
Introduction-Truth (null object) Returns true when object is
nil > (null nil) T (not object) Returns true when object is nil
> (not nil) T 25
Introduction-Truth (and expression) Evaluates the expression in
order, returning nil immediately if one evaluates to nil, or if
they all return true, the value of the last. Returns t if given no
arguments. > (and t (+ 1 2)) 3 27
Slide 28
Introduction Exercises Describe what happens when the following
expressions are evaluated (+ (- 5 1) (+ 3 7)) (list 1 (+ 2 3)) (if
(listp 1) (+ 1 2) (+ 3 4)) (list (and (listp 3) t) (+ 1 2)) 28
Slide 29
Introduction-Functions defun > (defun our-fun (x) (car (cdr
(cdr x)))) OUR-FUN > (our-fun (a b c d)) C A symbol has to be
quoted because otherwise it will be treated as a variable >
(> (+ 1 4) 3) T (defun sum-greater (x y z) (> (+ x y) z))
SUM-GREATER > (sum-greater 1 4 3) T 29
Slide 30
Introduction-Functions Lisp makes no distinction between a
program, a procedure, and a function Functions do for everything
30
Slide 31
Introduction-Recursion (defun our-member (obj lst) (if (null
lst) nil (if (eql (car lst) obj) lst (our-member obj (cdr lst)))))
> (our-member b (a b c)) (B C) > (our-member z (a b c)) NIL
31
Slide 32
Introduction-Input and Output > (format t ~A plus ~A equals
~A. ~% 2 3 (+ 2 3 )) 2 plus 3 equals 5. NIL The first line is
displayed by format The second line is the value returned by the
call to format t indicates that the output is to be sent to
standard output The second argument is a string that serves as a
template for output ~% indicates a newline 32
Slide 33
Introduction-Input and Output Read No arguments Reads from the
standard input (toplevel) (defun ask (string) (format t ~A string)
(read)) > (ask How old are you?) How old are you? 20 20 33
Slide 34
Introduction-Variables Let One of the most frequently used
operators in Common Lisp > (let ((x 1) (y 2)) (+ x y)) 3 (defun
ask-number ( ) (format t Please enter a number. ) (let ((val
(read))) (if (numberp val) val (ask-number)))) 34
Slide 35
Introduction-Variables Global variable > (defparameter *x*
32) *x* > *x* 32 (defconstant limit (+ *x* 1)) (boundp symbol)
Returns true iff symbol is the name of a special variable >
(boundp *x*) T 35
Slide 36
Introduction Exercises What does this function do? (defun
enigma (x) (and (not (null x)) (or (null (car x)) (enigma (cdr
x))))) 36
Slide 37
Introduction-Assignment > (setf *x* 98) 98 > (let ((n 10)
(setf n 2) n) 2 > (setf x (list a b c)) (A B C) > (setf (car
x ) n) N > x (N B C) 37
Slide 38
Introduction-Assignment (setf a b c d e f) (setf a b) (setf c
d) (setf e f) 38
Slide 39
Introduction-Functional programming in Lisp Functional
programming means writing programs that work by returning values,
instead of by modifying things > (setf lst (c a r a t)) (C A R A
T) > (remove a lst) (C R T) > lst (C A R A T) (setf new_x
(remove a x)) 39
Slide 40
Introduction-Iteration (defun show-squares (start end) (do ((i
start (+ i 1))) ((> i end) done) (format t ~A ~A~% i (* i i))))
> (show-squares 2 5) 2 4 3 9 4 16 5 25 DONE 40
Slide 41
Introduction-Functions as Objects In Lisp, functions are
regular objects, like symbols or strings or lists (function
function_name) Returns the function whose name is function_name
> (function +) # > # + > (apply #+ (1 2 3)) 6 > (+ 1 2
3) 6 41
Slide 42
Introduction Exercises Mary is trying to write a function that
returns the sum of all the non-nil elements in a list. Explain why
this program cannot give a correct answer. (defun summit (lst)
(remove nil lst) (apply #+ lst)) 42