Preview:
Citation preview
- Slide 1
- Yu-Tzu Lin ( ) http://web.ntnu.edu.tw/~linyt
- Slide 2
- Information 2
- Slide 3
- 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); }
- Slide 11
- Introduction-Lisp Start to write CLISP
http://web.ntnu.edu.tw/~linyt/func_prog/CLisp.zip
http://web.ntnu.edu.tw/~linyt/func_prog/cltl_ps.tar
http://joung.im.ntu.edu.tw/teaching/pl/2001/Common_Lisp/readm
e.html
http://joung.im.ntu.edu.tw/teaching/pl/2001/Common_Lisp/readm
e.html 11
- Slide 12
- 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
- Slide 13
- Introduction-Lisp > (+) 0 > (+ 2) 2 > (+ 2 3) 5 >
(+ 2 3 4 5) 14 13
- Slide 14
- 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
- Slide 26
- Introduction-Truth > (if (listp (a b c)) (+ 1 2) (+ 5 6)) 3
> (if (listp 27) (+ 1 2) (+ 5 6)) 11 > (if (listp 27) (+ 2
3)) NIL > (if 27 1 2) 1 Everything except nil also counts as
true 26
- Slide 27
- 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