A Little Lisp

3,044 views

Published on

Presentation on Lisp given by James Ladd to the Melbourne Patterns group in September 2008

Published in: Technology, Education
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
3,044
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
114
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

A Little Lisp

  1. 1. (A Little LISP )‏ By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia
  2. 2. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia WHAT ?
  3. 3. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia The greatest single programming language ever designed. — Alan Kay
  4. 4. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia John McCarthy Created LISP
  5. 5. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia John McCarthy Recursive Functions of Symbolic Expressions and Their Computation by Machine
  6. 6. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia John McCarthy In 1958 Created LISP
  7. 7. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia LISP <( )=
  8. 8. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia In 1958
  9. 9. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia 1958
  10. 10. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia In 1958
  11. 11. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia In 1958 C IBM 704 FORTRAN C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION C INPUT - CARD READER UNIT 5, INTEGER INPUT C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING READ INPUT TAPE 5, 501, IA, IB, IC 501 FORMAT (3I5)‏ C IA, IB, AND IC MAY NOT BE NEGATIVE C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE C IS GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO IF (IA) 777, 777, 701 701 IF (IB) 777, 777, 702 702 IF (IC) 777, 777, 703 703 IF (IA+IB-IC) 777,777,704 704 IF (IA+IC-IB) 777,777,705 705 IF (IB+IC-IA) 777,777,799 777 STOP 1 C USING HERON'S FORMULA WE CALCULATE THE C AREA OF THE TRIANGLE 799 S = FLOATF (IA + IB + IC) / 2.0 AREA = SQRT( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) * + (S - FLOATF(IC)))‏ WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + 13H SQUARE UNITS)‏ STOP END
  12. 12. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Created LISP as mathematical notation for computer programs
  13. 13. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Based on Lambda Calculus
  14. 14. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Lambda Calculus the function f(x, y) = x - y would be written as λ x. λ y. x - y.
  15. 15. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia
  16. 16. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia List Processing Language (FOO (BAR 1) 2)‏
  17. 17. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia LISP pioneered: Tree Data Structures Automatic Storage Management Dynamic Typing Object Oriented Programming
  18. 18. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia LISP pioneered: Self-hosting Compiler !!
  19. 19. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia LISP = Pure Functional Language
  20. 20. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia FIFTY YEARS AGO
  21. 21. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Functional Programs Are: Stateless Deal only with Functions No side effects in 'state' Functions can return Functions
  22. 22. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (print &quot;Hello world&quot;)‏
  23. 23. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (defun factorial (n)‏ (if (<= n 1)‏ 1 (* n (factorial (- n 1)))))‏
  24. 24. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (dotimes (i 10)‏ (format t &quot;~A~%&quot; (+ 1 i)))‏
  25. 25. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia LISP is a series of expressions foo () (foo)‏ (foo bar) (a b (c) d)‏
  26. 26. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia A LISP expression Atom or a list of zero or more expressions, separated by whitespace and enclosed in ().
  27. 27. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia F oo = atom () = empty list (foo) = list of one atom (foo bar) = list of two atoms (a b (c) d) = list of 4 elements, the 3 rd one is itself a list.
  28. 28. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia > (+ 1 2) 3 >
  29. 29. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia > (+ 1 (- 10 5)) 6 >
  30. 30. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (quote x ) returns x >(quote a) a >'a a >(quote (+ 1 2)) (+ 1 2)‏
  31. 31. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (atom x ) returns t if x is an atom, otherwise () >(atom 'a) t >(atom '(a b c))‏ ()
  32. 32. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (eq x y ) returns t if x and y are same atom or both (), otherwise () >(eq 'a 'a) >(eq '() '()) t t >(eq 'a 'b)‏ ()
  33. 33. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (car x ) returns first element of value of x >(car '(a b c))‏ a >(car '('(foo) bar baz))‏ (foo)
  34. 34. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (cdr x ) returns everything after the first element of value of x >(cdr '(a b c))‏ (b c) >(cdr '('(foo) bar baz))‏ (bar baz)
  35. 35. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (cons x y ) returns a list containing value of x followed by value of y >(cons 'a '(b c))‏ (a b c) >(car (cons 'a '(b c)))‏ (b c)
  36. 36. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia
  37. 37. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (cond ( p1 e1 )...( p n e n )) The p expressions are evaluated in order until one returns t . When one is found, the value of the corresponding e expression is returned as the value of the whole cond expression.
  38. 38. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (cond ( p1 e1 )...( p n e n )) >(cond ((eq 'a 'b) 'first) ((atom 'a) 'second))‏ second
  39. 39. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia (cond ( p1 e1 )...( p n e n )) (cond ( x y ) ('t z ))‏ is equivalent to if x then y else z
  40. 40. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Recommended Reading The Little Lisper ANSI Common Lisp
  41. 41. A Little LISP, By James Ladd http://www.jamesladdcode.com with portions from The Roots Of Lisp, by Paul Graham All images © iStockPhoto or Wikipedia Some real code ...

×