LISP Lisp is worth learning for the profound

  • Slides: 14
Download presentation
LISP Lisp is worth learning for the profound enlightenment experience you will have when

LISP Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot. -- Eric Raymond* * in How to Become a Hacker, quoted by Paul Graham (see the CSE 341 Syllabus page) CSE 341 -- S. Tanimoto Introduction 1

LISP Intentions and Implementations • LISP = LISt Processing • Intended for processing symbolic

LISP Intentions and Implementations • LISP = LISt Processing • Intended for processing symbolic information • Implementations from noncommercial sites: • GNU Common Lisp (GCL) - U of Texas mods to Kyoto Common Lisp • CLISP -- developed in Germany. • Available implementations from www. franz. com: • Allegro Common Lisp for Windows, Web edition. • Allegro Common Lisp for Linux CSE 341 -- S. Tanimoto Introduction 2

LISP: Our Objectives • Motivation and History • Interactive programming • Functional programming •

LISP: Our Objectives • Motivation and History • Interactive programming • Functional programming • List manipulation with recursive functions • Polymorphism • Language extensibility via macro definitions • Closures (compare with objects) • Language evolution to support multiple paradigms • Lisp on the Web CSE 341 -- S. Tanimoto Introduction 3

History of Lisp (continued) • John Mc. Carthy, developed the ideas during the Dartmouth

History of Lisp (continued) • John Mc. Carthy, developed the ideas during the Dartmouth Summer Research Project on Artificial Intelligence, 1956. • First implementation on the IBM 704 • John Mc. Carthy published “Recursive functions of symbolic expressions and their computation by machine” in Communications of the Association for Computing Machinery in 1960. CSE 341 -- S. Tanimoto Introduction 4

History of Lisp (continued) • 1970 s: advanced dialects -- Mac. Lisp, Inter. Lisp;

History of Lisp (continued) • 1970 s: advanced dialects -- Mac. Lisp, Inter. Lisp; • Lisp machines (Symbolics, Inc. ; Lisp Machines, Inc. ; Xerox; Texas Instruments) • Late 1970 s: Scheme, Portable Standard Lisp, XLISP. • 1984. Common Lisp. • Use of Lisp as internal scripting languages: Gnu Emacs, Auto. CAD. • 1987 CLOS = Common Lisp Object System. • 1994 ANSI Standard Lisp. CSE 341 -- S. Tanimoto Introduction 5

Interacting with Lisp • Interaction takes place in a Lisp Listener Window. • Lisp

Interacting with Lisp • Interaction takes place in a Lisp Listener Window. • Lisp runs an endless “READ-EVAL-PRINT loop” for interacting with the user: READ EVAL PRINT CSE 341 -- S. Tanimoto Introduction 6

Interacting with Lisp (continued) > (+ 3 5) 8 > (* 2. 5 (+

Interacting with Lisp (continued) > (+ 3 5) 8 > (* 2. 5 (+ 2 2)) 10. 0 > (setq x 5) 5 > (sqrt x) 2. 236068 > (* x x) 25 CSE 341 -- S. Tanimoto Introduction 7

Lisp’s Syntax Lisp uses one fundamental syntactic construct, the “symbolic expression” or S-expression. Any

Lisp’s Syntax Lisp uses one fundamental syntactic construct, the “symbolic expression” or S-expression. Any “atom” such as a number or a symbol, is an Sexpression. Any parenthesized list of S-expressions, separated by whitespace, is an S-expression. A functional form is a list of the form (function-name arg 1 arg 2. . . arg. N) This is sometimes called parenthesized prefix form. (+ 3 5) (* 2. 5 (+ 2 2 7)) (sqrt x) CSE 341 -- S. Tanimoto Introduction 8

Parentheses in Lisp Every parenthesis in an S-expression has significance. (a b c) is

Parentheses in Lisp Every parenthesis in an S-expression has significance. (a b c) is different from (a (b c)) or ((a b) c). To call a zero-argument function, put its name in parentheses: (read) But not ((read)) The empty list can be denoted ( ) or NIL. Parentheses should always be balanced. (+ 3 (* 4 5) is an incomplete S-expression. Misplaced paren’s are a leading cause of beginners’ Lisp programming errors. CSE 341 -- S. Tanimoto Introduction 9

In-Class Exercise Convert the following mathematical expressions into Lisp’s parenthesized prefix form. a. b.

In-Class Exercise Convert the following mathematical expressions into Lisp’s parenthesized prefix form. a. b. c. d. e. 5+9 5 x+9 y+z 100 w / 7 mod 255 P and Q or R y = f(x + 1) CSE 341 -- S. Tanimoto Introduction 10

Defining a function > (* 5 5 5) 125 > (defun cube (n) (*

Defining a function > (* 5 5 5) 125 > (defun cube (n) (* n n n)) CUBE > (cube 2) 8 > (cube 15. 001) 3375. 6753 CSE 341 -- S. Tanimoto Introduction 11

Symbolic Values Symbols are like identifiers, but they are commonly used as values as

Symbolic Values Symbols are like identifiers, but they are commonly used as values as well as variables. > (setq x ’pizza) PIZZA > x PIZZA > (setq pizza ’pepperoni) PEPPERONI > pizza PEPPERONI > (eval x) PEPPERONI CSE 341 -- S. Tanimoto Introduction 12

More on Evaluation of Symbols > Y > Z > X (setq x ’y)

More on Evaluation of Symbols > Y > Z > X (setq x ’y) (setq y ’z) (setq z ’x) x (eval x)) CSE 341 -- S. Tanimoto Introduction 13

Values of Symbols A symbol without a value in the current context is said

Values of Symbols A symbol without a value in the current context is said to be “unbound”. The value of a symbol can be any Lisp object, including a number, another symbol, a functional object, a list, and array, etc. A symbol can have several local (“lexical”) values and one global value. However, symbols belong to “packages”, and two different packages can have symbols with the same name. CSE 341 -- S. Tanimoto Introduction 14