ݺߣ

ݺߣShare a Scribd company logo
http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)




                                        Lisp
           (Gauche                                                    )
2.1
2
2000       EY-Of?ce




       3
4
Lisp




       5
New York           The
                                                           lisps            Sammy
                                                           Tunis

                                                           ?ickr    lisp




http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)

                                                       6
Lisp

S

Lisp

       (Lisp       )

               7
Lisp


       http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)


         8
Lisp             LL
1960           1970                        1980                       1990                            2000


FORTAN                 C                              C++                                    Java            C#


 ALGOL           Pascal


             Simula

  COBOL




   Lisp1.5                                        Common
                                                    Lisp


                                      Scheme
                                                                      Perl            Ruby


                          Smalltalk                                          Python



                                                                                         Javascript
                                                            Haskell
                      Prolog


                                                  9
Lisp
                    Perl,Ruby,Python,
                      Javascript ...




                     Java,Perl,Ruby,
                        Python,
                      Javascript ...


 (Lisp)                Haskell,Scale
                          (Ruby,
                       Javascript...)




               !?

                     !?
          10
11
GC (Garbage collection)




           12
13
(Symbolic Expression)




       14
15
S


    http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)


     16
S




    17
S




    18
S




    19
S




    20
S




    21
S




    22
23
24
Lisp



       http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)


         25
% rlwrap gosh
gosh> (+ 1 2)
3
gosh> (* 2 (+ 3 4))
14
gosh>




                26
gosh>   (define a 3)
a
gosh>   a
3
gosh>   (define b (+ 2 5))
b
gosh>   b
7
gosh>   (+ a b)
10

                  27
gosh> (set! a (+ a 1))
4
gosh> a
4
gosh> c
*** ERROR: unbound variable: c
gosh>


                28
gosh> (let ((a 2)
            (b 3))
        (set! a (+ a 1))
        (+ a b))
6
gosh>




                29
gosh> (define (add3 n) (+ n 3))
add3
gosh> (add3 5)
8
gosh> (add3 (add3 4))
10



                30
quote

gosh> c
*** ERROR: unbound variable: c
Stack Trace:
_______________________________
gosh> (quote c)
c
gosh> 'c
c
gosh>
                 31
quote

gosh> (x y z)
*** ERROR: unbound variable: y
Stack Trace:
_________________________________
gosh> '(x y z)
(x y z)
gosh> (append '(a b) '(c d))
(a b c d)
gosh>
                 32
S

gosh> (car '(a b c))
a
gosh> (cdr '(a b c))
(b c)
gosh> (cons 'a '(b c))
(a b c)
gosh>


                 33
gosh>
(define (fact n)
  (if (= n 0)
      1
      (* n (fact (- n 1)))))
fact
gosh> (fact 3)
6
gosh> (fact 10)
3628800
gosh>
                  34
gosh> (define sample
'(html
 (body
   (h1 "Lisp")
   (table
     (tr (td 1) (td "lisp"))
     (tr (td 2) (td "scheme"))))))
sample
gosh> (print-html sample)
<html><body><h1>Lisp</h1><table><tr><td>1</td><td>lisp</
td></tr><tr><td>2</td><td>scheme</td></tr></table></
body></html>#<undef>
gosh>
                           35
36
(define (print-html e)
  (if (list? e)
      (begin
       (format #t "<~a>" (car e))
	      (print-html-list   (cdr e))
	      (format #t "</~a>" (car e)))
      (display e)))




                   37
(define (print-html-list l)
  (if (null? l)
      #f
      (begin
       (print-html (car l))
	      (print-html-list (cdr l)))))




                   38
(define (print-html-list l)
  (until (null? l)
    (print-html (car l))
    (set! l (cdr l))))




                   39
Lisp



       http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)


        40
41
> (if (not (= 0 1))
       (print "not-eq")
       (print "eq"))
not-eq
> (not-if (= 0 1)
       (print "not-eq")
       (print "eq"))
not-eq

                    42
(define-macro (not-if test then else)
  (list 'if (list 'not test) then else))


gosh> (not-if (= 0 1) (print "not-eq") (print "eq"))
not-eq
#<undef>
gosh> (not-if (= 0 0) (print "not-eq") (print "eq"))
eq
#<undef>

                         43
(define-macro (not-if test then else)
  (list 'if (list 'not test) then else))

> (let ((test '(= 0 1))
        (then '(print "not-eq"))
        (else '(print "eq")))
   (list 'if (list 'not test) then else))

(if (not (= 0 1)) (print "not-eq") (print "eq"))
                        44
(define-macro (not-if test then else)
  `(if (not ,test) ,then ,else)


 gosh> (let ((a 2) (b 3))
         `(add ,a (sub 5 ,(+ b 1))))
 (add 2 (sub 5 4))
 gosh>

                         45
DSL

(define-action index
  (set! @todos (find <todo> :all)))

(define-action show
  (set! @todo (find <todo> (params :id))))

(define-action edit
  (set! @todo (find <todo> (params :id)))
  (define-continuation edit
   (when (update_attributes @todo (params :todo))
     (flash :notice "todo was successfully updated.")
     (redirect :action 'index))))


                             46
Lisp




       47
REPL




 48
eval (        )




         49
env (        )




        50
51
gosh>   (define (add2 n) (+ n 2))
add2
gosh>   (add2 3)
5
gosh>   (define add2 (lambda(n) (+ n 2)))
add2
gosh>   (add2 3)
5
gosh>

                          52
Lisp




       53
54
http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution)




2.1
       55

More Related Content

Lisp Primer Key

  • 2. 2
  • 3. 2000 EY-Of?ce 3
  • 4. 4
  • 5. Lisp 5
  • 6. New York The lisps Sammy Tunis ?ickr lisp http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution) 6
  • 7. Lisp S Lisp (Lisp ) 7
  • 8. Lisp http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution) 8
  • 9. Lisp LL 1960 1970 1980 1990 2000 FORTAN C C++ Java C# ALGOL Pascal Simula COBOL Lisp1.5 Common Lisp Scheme Perl Ruby Smalltalk Python Javascript Haskell Prolog 9
  • 10. Lisp Perl,Ruby,Python, Javascript ... Java,Perl,Ruby, Python, Javascript ... (Lisp) Haskell,Scale (Ruby, Javascript...) !? !? 10
  • 11. 11
  • 13. 13
  • 15. 15
  • 16. S http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution) 16
  • 17. S 17
  • 18. S 18
  • 19. S 19
  • 20. S 20
  • 21. S 21
  • 22. S 22
  • 23. 23
  • 24. 24
  • 25. Lisp http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution) 25
  • 26. % rlwrap gosh gosh> (+ 1 2) 3 gosh> (* 2 (+ 3 4)) 14 gosh> 26
  • 27. gosh> (define a 3) a gosh> a 3 gosh> (define b (+ 2 5)) b gosh> b 7 gosh> (+ a b) 10 27
  • 28. gosh> (set! a (+ a 1)) 4 gosh> a 4 gosh> c *** ERROR: unbound variable: c gosh> 28
  • 29. gosh> (let ((a 2) (b 3)) (set! a (+ a 1)) (+ a b)) 6 gosh> 29
  • 30. gosh> (define (add3 n) (+ n 3)) add3 gosh> (add3 5) 8 gosh> (add3 (add3 4)) 10 30
  • 31. quote gosh> c *** ERROR: unbound variable: c Stack Trace: _______________________________ gosh> (quote c) c gosh> 'c c gosh> 31
  • 32. quote gosh> (x y z) *** ERROR: unbound variable: y Stack Trace: _________________________________ gosh> '(x y z) (x y z) gosh> (append '(a b) '(c d)) (a b c d) gosh> 32
  • 33. S gosh> (car '(a b c)) a gosh> (cdr '(a b c)) (b c) gosh> (cons 'a '(b c)) (a b c) gosh> 33
  • 34. gosh> (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) fact gosh> (fact 3) 6 gosh> (fact 10) 3628800 gosh> 34
  • 35. gosh> (define sample '(html (body (h1 "Lisp") (table (tr (td 1) (td "lisp")) (tr (td 2) (td "scheme")))))) sample gosh> (print-html sample) <html><body><h1>Lisp</h1><table><tr><td>1</td><td>lisp</ td></tr><tr><td>2</td><td>scheme</td></tr></table></ body></html>#<undef> gosh> 35
  • 36. 36
  • 37. (define (print-html e) (if (list? e) (begin (format #t "<~a>" (car e)) (print-html-list (cdr e)) (format #t "</~a>" (car e))) (display e))) 37
  • 38. (define (print-html-list l) (if (null? l) #f (begin (print-html (car l)) (print-html-list (cdr l))))) 38
  • 39. (define (print-html-list l) (until (null? l) (print-html (car l)) (set! l (cdr l)))) 39
  • 40. Lisp http://www.?ickr.com/photos/dust/3603580129/ (CC Attribution) 40
  • 41. 41
  • 42. > (if (not (= 0 1)) (print "not-eq") (print "eq")) not-eq > (not-if (= 0 1) (print "not-eq") (print "eq")) not-eq 42
  • 43. (define-macro (not-if test then else) (list 'if (list 'not test) then else)) gosh> (not-if (= 0 1) (print "not-eq") (print "eq")) not-eq #<undef> gosh> (not-if (= 0 0) (print "not-eq") (print "eq")) eq #<undef> 43
  • 44. (define-macro (not-if test then else) (list 'if (list 'not test) then else)) > (let ((test '(= 0 1)) (then '(print "not-eq")) (else '(print "eq"))) (list 'if (list 'not test) then else)) (if (not (= 0 1)) (print "not-eq") (print "eq")) 44
  • 45. (define-macro (not-if test then else) `(if (not ,test) ,then ,else) gosh> (let ((a 2) (b 3)) `(add ,a (sub 5 ,(+ b 1)))) (add 2 (sub 5 4)) gosh> 45
  • 46. DSL (define-action index (set! @todos (find <todo> :all))) (define-action show (set! @todo (find <todo> (params :id)))) (define-action edit (set! @todo (find <todo> (params :id))) (define-continuation edit (when (update_attributes @todo (params :todo)) (flash :notice "todo was successfully updated.") (redirect :action 'index)))) 46
  • 47. Lisp 47
  • 49. eval ( ) 49
  • 50. env ( ) 50
  • 51. 51
  • 52. gosh> (define (add2 n) (+ n 2)) add2 gosh> (add2 3) 5 gosh> (define add2 (lambda(n) (+ n 2))) add2 gosh> (add2 3) 5 gosh> 52
  • 53. Lisp 53
  • 54. 54