140 likes | 161 Views
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*.
E N D
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
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
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
History of Lisp (continued) • John McCarthy, developed the ideas during the Dartmouth Summer Research Project on Artificial Intelligence, 1956. • First implementation on the IBM 704 • John McCarthy 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
History of Lisp (continued) • 1970s: advanced dialects -- MacLisp, InterLisp; • Lisp machines (Symbolics, Inc.; Lisp Machines, Inc.; Xerox; Texas Instruments) • Late 1970s: Scheme, Portable Standard Lisp, XLISP. • 1984. Common Lisp. • Use of Lisp as internal scripting languages: Gnu Emacs, AutoCAD. • 1987 CLOS = Common Lisp Object System. • 1994 ANSI Standard Lisp. CSE 341 -- S. Tanimoto Introduction
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
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
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 S-expression. Any parenthesized list of S-expressions, separated by whitespace, is an S-expression. A functional form is a list of the form (function-name arg1 arg2 ... argN) This is sometimes called parenthesized prefix form. (+ 3 5) (* 2.5 (+ 2 2 7)) (sqrt x) CSE 341 -- S. Tanimoto Introduction
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
In-Class Exercise Convert the following mathematical expressions into Lisp’s parenthesized prefix form. a. 5 + 9 b. 5 x + 9 y + z c. 100 w / 7 mod 255 d. P and Q or R e. y = f(x + 1) CSE 341 -- S. Tanimoto Introduction
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
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
More on Evaluation of Symbols > (setq x ’y) Y > (setq y ’z) Z > (setq z ’x) X > x Y > (eval x) Z > (eval (eval x)) X CSE 341 -- S. Tanimoto Introduction
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