Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the...
Transcript of Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the...
![Page 1: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/1.jpg)
Lisp:Examplesref:Lisp(3rdEd)Winston&Horn• Primitive functions
• (+ 5 2 ) yields 7• (+ 5 2 3 11) yields 21• (+) yields 0
07/0
3/20
16P
S -
Lisp
Intro
1
![Page 2: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/2.jpg)
Lisp:Examples• List access
• (first ‘( A B C )) yields A• (first ‘((A B) C D)) yields (A B)• (first ‘( )) yields NIL (empty list)• (first ‘A) yields an error
A is not a list
07/0
3/20
16P
S -
Lisp
Intro
2
![Page 3: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/3.jpg)
Lisp:Examples• List constructors: cons, append, list, last, rest
(cons ‘A ‘()) (A)(cons ‘A ‘(B C)) (A B C)(cons ‘( ) ‘(A B)) (Nil A B)(cons ‘(A B) ‘( D E F)) ((A B) D E F)
(append ‘(A B) ‘((C D) E F)) (A B (C D) E F)(list ‘A ‘B ‘C ‘D) (A B C D)(last ‘(A B C D)) (D)(rest ‘(A B C D)) (B C D)
07/0
3/20
16P
S -
Lisp
Intro
3
![Page 4: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/4.jpg)
Lisp:Examples• Predicate functions
• listp – is the argument a list?• (listp ‘(A B)) T• (listp nil) T (empty list)• (listp ‘A) nil (not a list)
• null – is the list empty?• (null ‘(A)) Nil• (null nil) T
07/0
3/20
16P
S -
Lisp
Intro
4
![Page 5: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/5.jpg)
Lisp:Examples (HicsuntDracones!)
• Predicate functions – equality
• EQ – T if both arguments are atoms and the same
• (eq ‘A ‘A) T• (eq ‘A ‘(A B)) Nil• (eq ‘(A B) ‘(A B)) Nil (not atoms!)• (equal ‘(A B) ‘(A B)) T
• (eq 1.5 1.5) Nil• (= 1.5 1.5) T
• TAKE CARE WITH TESTS FOR EQUALITY!
07/0
3/20
16P
S -
Lisp
Intro
5
![Page 6: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/6.jpg)
Lisp:Examples– Specialforms• set; setq (set quote); setf (set field) (structures)
• set / setq / setf• (set ‘pi 3.141539) ;; pi is quoted• (setq pi 3.141539) ;; pi is not quoted• (setf pi 3.141593) ;; pi is not quoted
• defun ;; define a function• (defun square (x) (* x x))• (square 4) 16
07/0
3/20
16P
S -
Lisp
Intro
6
![Page 7: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/7.jpg)
Lisp:Examples• Control flow: if, when, unless
• (if <predicate> <then_exp> <else_exp>)• (defun myabs (x) (if (< x 0) (‐ x) x))
• if with a NIL else clause (if <test> <then form> nil ) • (when <test> <then form>)
• if with a NIL then clause (if <test> nil <else form>)• (unless <test> <else form>)
07/0
3/20
16P
S -
Lisp
Intro
7
![Page 8: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/8.jpg)
Lisp:Examples
• Control flow ‐ Cond
(cond(test_1 (expr))(test_2 (expr))…(test_n (expr))(t (expr)))
NB: otherwise == t (true)
(defun my_abs (x)
(cond( (= x 0) 0)( (< x 0) (‐ x))( (> x 0) x))
)
07/0
3/20
16P
S -
Lisp
Intro
8
![Page 9: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/9.jpg)
Lisp:Examples
• Control flow ‐ Cond
(cond(test_1 (expr))(test_2 (expr))…(test_n (expr))(t (expr)))
NB: otherwise == t (true)
(defun member (atm lis)
(cond( (null lis) NIL)( (eq atm (first lis)) T)( T (member atm (rest lis))))
)
07/0
3/20
16P
S -
Lisp
Intro
9
![Page 10: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/10.jpg)
Lisp:Examples(defun equalsimp (lis1 lis2)(cond((null lis1) (null lis2)) ; 1((null lis2) nil) ; 2((eq (first lis1) (first lis2)) ; 3
(equalsimp (rest lis1) (rest lis2)))(t nil) ; 4
))1 – both lists = empty T; lis1 empty & lis2 not empty false2 – lis1 is NOT empty & lis2 is empty nil (false)3 – the first elements of each list are equal test the rest of the list4 – default nil (false)
07/0
3/20
16P
S -
Lisp
Intro
10
![Page 11: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/11.jpg)
Lisp:Examples• equalsimp takes 2 simple lists as arguments
• (i.e. no nested lists)
• (equalsimp ‘(A B) ‘(A B)) T
• (equalsimp ‘(A B) ‘(A B C)) nil
• (equalsimp ‘A ‘A) nil
07/0
3/20
16P
S -
Lisp
Intro
11
![Page 12: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/12.jpg)
Lisp:Examples– equalsimp ‐ trace
EQUALSIMP;; Tracing function EQUALSIMP.(EQUALSIMP)1. Trace: (EQUALSIMP '(A B) '(A B))2. Trace: (EQUALSIMP '(B) '(B))3. Trace: (EQUALSIMP 'NIL 'NIL)3. Trace: EQUALSIMP ==> T2. Trace: EQUALSIMP ==> T1. Trace: EQUALSIMP ==> TT(EQUALSIMP)Bye.
07/0
3/20
16P
S -
Lisp
Intro
12
![Page 13: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/13.jpg)
Lisp:Examples– equalsimp ‐ trace
EQUALSIMP;; Tracing function EQUALSIMP.(EQUALSIMP)1. Trace: (EQUALSIMP '(A B) '(A B C))2. Trace: (EQUALSIMP '(B) '(B C))3. Trace: (EQUALSIMP 'NIL '(C))3. Trace: EQUALSIMP ==> NIL2. Trace: EQUALSIMP ==> NIL1. Trace: EQUALSIMP ==> NILNIL(EQUALSIMP)Bye.
07/0
3/20
16P
S -
Lisp
Intro
13
![Page 14: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/14.jpg)
Lisp:Examples– equalsimp ‐ trace
EQUALSIMP;; Tracing function EQUALSIMP.(EQUALSIMP)1. Trace: (EQUALSIMP 'A 'A)*** ‐ FIRST: A is not a list(EQUALSIMP)Bye.
07/0
3/20
16P
S -
Lisp
Intro
14
![Page 15: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/15.jpg)
Lisp:Examples‐myequal(defun myequal (lis1 lis2)(cond((not (listp lis1)) (eq lis1 lis2))((not (listp lis2)) nil)((null lis1) (null lis2))((null lis2) nil)((myequal (first lis1) (first lis2))
(myequal (rest lis1) (rest lis2)))(t nil)
))(trace myequal)(myequal '(A B) '(A B))(untrace)
NB: test for list (listp)
07/0
3/20
16P
S -
Lisp
Intro
15
![Page 16: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/16.jpg)
Lisp:Examples– myequal +traceMYEQUAL;; Tracing function MYEQUAL.(MYEQUAL)1. Trace: (MYEQUAL '(A B) '(A B))2. Trace: (MYEQUAL 'A 'A)2. Trace: MYEQUAL ==> T2. Trace: (MYEQUAL '(B) '(B))3. Trace: (MYEQUAL 'B 'B)3. Trace: MYEQUAL ==> T3. Trace: (MYEQUAL 'NIL 'NIL)3. Trace: MYEQUAL ==> T2. Trace: MYEQUAL ==> T1. Trace: MYEQUAL ==> TT(MYEQUAL)Bye.
07/0
3/20
16P
S -
Lisp
Intro
16
![Page 17: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/17.jpg)
Lisp:Examples– myequal +traceMYEQUAL;; Tracing function MYEQUAL.(MYEQUAL)1. Trace: (MYEQUAL '(A B) '(A C))2. Trace: (MYEQUAL 'A 'A)2. Trace: MYEQUAL ==> T2. Trace: (MYEQUAL '(B) '(C))3. Trace: (MYEQUAL 'B 'C)3. Trace: MYEQUAL ==> NIL2. Trace: MYEQUAL ==> NIL1. Trace: MYEQUAL ==> NILNIL(MYEQUAL)Bye.
07/0
3/20
16P
S -
Lisp
Intro
17
![Page 18: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/18.jpg)
Lisp:Examples– myequal +traceMYEQUAL;; Tracing function MYEQUAL.(MYEQUAL)1. Trace: (MYEQUAL '(A B) '(A B C))2. Trace: (MYEQUAL 'A 'A)2. Trace: MYEQUAL ==> T2. Trace: (MYEQUAL '(B) '(B C))3. Trace: (MYEQUAL 'B 'B)3. Trace: MYEQUAL ==> T3. Trace: (MYEQUAL 'NIL '(C))3. Trace: MYEQUAL ==> NIL2. Trace: MYEQUAL ==> NIL1. Trace: MYEQUAL ==> NILNIL(MYEQUAL)Bye.
07/0
3/20
16P
S -
Lisp
Intro
18
![Page 19: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/19.jpg)
Lisp:Examples– myequal +trace
MYEQUAL;; Tracing function MYEQUAL.(MYEQUAL)1. Trace: (MYEQUAL 'A 'A)1. Trace: MYEQUAL ==> TT1. Trace: (MYEQUAL 'A 'B)1. Trace: MYEQUAL ==> NILNIL(MYEQUAL)Bye.
07/0
3/20
16P
S -
Lisp
Intro
19
![Page 20: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/20.jpg)
Lisp:Examples– myequal +traceMYEQUAL;; Tracing function MYEQUAL.(MYEQUAL)1. Trace: (MYEQUAL '((A B) C (D E))
'((A B) C (D E)))2. Trace: (MYEQUAL '(A B) '(A B))3. Trace: (MYEQUAL 'A 'A)3. Trace: MYEQUAL ==> T3. Trace: (MYEQUAL '(B) '(B))4. Trace: (MYEQUAL 'B 'B)4. Trace: MYEQUAL ==> T4. Trace: (MYEQUAL 'NIL 'NIL)4. Trace: MYEQUAL ==> T3. Trace: MYEQUAL ==> T2. Trace: MYEQUAL ==> T2. Trace: (MYEQUAL '(C (D E)) '(C (D E)))3. Trace: (MYEQUAL 'C 'C)3. Trace: MYEQUAL ==> T
3. Trace: (MYEQUAL '((D E)) '((D E)))4. Trace: (MYEQUAL '(D E) '(D E))5. Trace: (MYEQUAL 'D 'D)5. Trace: MYEQUAL ==> T5. Trace: (MYEQUAL '(E) '(E))6. Trace: (MYEQUAL 'E 'E)6. Trace: MYEQUAL ==> T6. Trace: (MYEQUAL 'NIL 'NIL)6. Trace: MYEQUAL ==> T5. Trace: MYEQUAL ==> T4. Trace: MYEQUAL ==> T4. Trace: (MYEQUAL 'NIL 'NIL)4. Trace: MYEQUAL ==> T3. Trace: MYEQUAL ==> T2. Trace: MYEQUAL ==> T1. Trace: MYEQUAL ==> TT(MYEQUAL)Bye.
07/0
3/20
16P
S -
Lisp
Intro
20
![Page 21: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/21.jpg)
Lisp:Examples
• Scope & fences – let>(setf x 'outside) Warning: Declaring X special.
OUTSIDE
>(let ((x 'inside) (y x))(list x y))
(INSIDE OUTSIDE)
Evaluation order NOT sequential
• Scope & fences – let*>(setf x 'outside) Warning: Declaring X special.
OUTSIDE
>(let* ((x 'inside) (y x))(list x y))
(INSIDE INSIDE)
Evaluation order sequential
07/0
3/20
16P
S -
Lisp
Intro
21
![Page 22: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/22.jpg)
Lisp:Examples• let
• binds values to arguments – IN PARALLEL !!!• creates a local environment (block)• may have a “body” which is evaluated
• let*• Shorthand for nested let’s• binds values to arguments – IN SERIAL• may have a “body” which is evaluated
07/0
3/20
16P
S -
Lisp
Intro
22
![Page 23: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/23.jpg)
Lisp:Examples• Scope & fences – let*>(setf x 'outside) Warning: Declaring X special.
OUTSIDE
>(let* ((x 'inside) (y x))(list x y))
(INSIDE INSIDE)
• Scope & fences – let*>(setf x 'outside) Warning: Declaring X special.
OUTSIDE
>(let ((x 'inside))(let (y x))(list x y)))
(INSIDE INSIDE)
07/0
3/20
16P
S -
Lisp
Intro
23
![Page 24: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/24.jpg)
Lisp:Examples• Lambda expressions & defun
• (defun second (L) (first (rest L)))• (lambda (L) (first (rest L)))
• Application• (second ‘(A B C)) B• ((lambda (L) (first (rest L))) ‘(A B C)) B
• defun can be thought of as binding a name to a lambda expression
07/0
3/20
16P
S -
Lisp
Intro
24
![Page 25: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/25.jpg)
Lisp:ExamplesSum of squares>(defun square (x) (* x x))
>(defun sum‐square (index n)(if (> index n)0(+ (square index)(sum‐square (+ 1 index) n))
))>(sum‐square 1 3)14
Sum of sinessin is defined in Lisp
>(defun sum‐sin (index n)(if (> index n)0(+ (sin index)(sum‐sin (+ 1 index) n))
))>(sum‐sin 1 3)1.8918884
07/0
3/20
16P
S -
Lisp
Intro
25
![Page 26: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/26.jpg)
Lisp:Examples• function as argument
>(defun square (x) (* x x))
>(defun sum (fn index n)(if (> index n)0(+ (funcall fn index)
(sum fn (+ 1 index) n) )))
>( sum ( function square) 1 3)14NB: sum has 3 arguments
• function• denotes that argument is a function (cf quote)
• creates a function object (lexical closure)
• Abbreviated as #’
> (sum #’square 1 3)14
> (sum #’sin 1 3)1.8918884
07/0
3/20
16P
S -
Lisp
Intro
26
![Page 27: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/27.jpg)
Lisp:Examples• Functions as return values
> (defun create‐add (const)(function (lambda (x)
(+ x const))))
> (funcall (create‐add 17) 3)20NB: argument to create‐add is 17The argument to the functionreturned by create‐add is 3
• Functions as return values
> (setf add‐17 (create‐add 17))> (setf add‐97 (create‐add 97))
> (funcall add‐17 3)20> (funcall add‐97 13)110> ; create a list of functions> (list (create‐add 10)
(create‐add 20)(create‐add 30))
07/0
3/20
16P
S -
Lisp
Intro
27
![Page 28: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/28.jpg)
Lisp:Examples• Functional forms
• Composition• (defun compose (f g)
(lambda (x) (funcall f (funcall g x)))
• Apply to all: mapcar ‐ apply a function to list elements> (mapcar #’ (lambda (n) (+ n 2)) ‘(5 6 7 8))> (7 8 9 10)> (mapcar #’ square ‘(5 6 7 8))> (25 36 49 64)
07/0
3/20
16P
S -
Lisp
Intro
28
![Page 29: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/29.jpg)
Lisp:Examples(defunmapcar (fun lis)(cond( (null lis) ‘())( T (cons (funcall fun (first lis))
(mapcar fun (rest lis)))))
)
NB: if lis is empty return the empty listotherwise create a list (cons) with the function applied to the first element of the list and mapcar fun on the tail of the list
07/0
3/20
16P
S -
Lisp
Intro
29
![Page 30: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/30.jpg)
Lisp:Examples• Eval
• the Lisp interpreter is a loop read‐eval‐print• the expression (text) is first read• then the expression is evaluated • finally the result of the expression is printed
> (setf form ‘(+ 2 2)) ; form is a list object with 3 elements(+ 2 2)
> form ; the value of form(+ 2 2)
> (eval form) ; the evaluation of form4 ; the first element (+) is a function
07/0
3/20
16P
S -
Lisp
Intro
30
![Page 31: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/31.jpg)
Lisp:Examples• EVAL example >(defun adder (lis)
(cond( (null lis) 0)( T (eval (cons ‘+ lis)))
))>(adder ‘(1 2 3 4))10
07/0
3/20
16P
S -
Lisp
Intro
31
![Page 32: Lisp: ExamplesLisp: Examples • Eval • the Lisp interpreter is a loop read‐eval‐print • the expression (text) is first read • then the expression is evaluated • finally](https://reader030.fdocuments.us/reader030/viewer/2022040402/5e85573d3e548820ab037f40/html5/thumbnails/32.jpg)
Lisp:Examples
• Primitive functions +• List functions
• first, rest, cons, list, append, last• listp, null
• Predicates: eq, =• Special forms
• set / setq / setf, defun
• Control flow• if, (when, unless) cond
• Scope (environment)• let, let*
• Function related• lambda expressions• defun• lambda / let• function (#’)• funcall• mapcar• eval
07/0
3/20
16P
S -
Lisp
Intro
32