CS3101 Programming Languages (Lisp) Lecture 1
Total Page:16
File Type:pdf, Size:1020Kb
Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs CS3101 Programming Languages (Lisp) Lecture 1 Bob Coyne ([email protected]) Columbia University March 10, 2017 1/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Course Information • When: 7 Weeks (10:10am-Noon on Fridays) • Where: 417 Mathematics • Who (instructor): Bob Coyne ([email protected]) • Who (TA): Ben Kuykendall ([email protected]) • Why: Lisp is fun (and powerful)! 2/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Introduction to Lisp { Overview • Class participation: 10% • 5 homeworks (each due before the next class): 50% These will be small programming exercises to reinforce what's covered in class • Project proposal: 10% • Final project: 30% can be individuals or teams (up to 3 people) 3/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Approximate Syllabus March 10 Background: history, installing, resources. Basics: sym- bols, evaluation, data types, lists, conditionals, functions, lambda forms, Emacs, REPL, ... March 24 More basics: Backquote, vectors, sequences, file system, loop, format, packages, streams, debugger, compiling, ... March 31 Macros etc: Macros, closures, reader macros, Error sys- tem, performance tuning April 7 Objects etc: Type system, CLOS, Structs, FFI, OS hooks... April 14 External libraries: Quicklisp, ASDF, cl-json, cl-html, cl- ppcre, drakma, ... April 21 AI: Prolog in Lisp, knowledge representation, constraints, unification April 28 Lisp variants/offshoots (Elisp, Clojure, Scheme, Mathe- matica, Parenscript) 4/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Online Books and Language References • Practical Common Lisp (Peter Seibel) { [excellent modern intro to Lisp] http://www.gigamonkeys.com/book/ • Lisp Hyperspec { [very useful, nicely indexed language reference] http://www.lispworks.com/documentation/HyperSpec/Front/index.htm • Lisp Recipes (Edi Weitz) - [lots of practical info...access within Columbia network] http://link.springer.com/book/10.1007%2F978-1-4842-1176-2 • On Lisp (Paul Graham) { [semi-advanced, but excellent] http://www.paulgraham.com/onlisp.html • Common Lisp { A Gentle Introduction to Symbolic Computation (Touretzky) https://www.cs.cmu.edu/~dst/LispBook/book.pdf • Common Lisp the Language (Guy Steele) { [The de-facto language specification] https://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html • Let over Lambda (Doug Hoyte) { [advanced on closures, etc] http://letoverlambda.com/ 5/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Useful websites and online resources • CLiki http://cliki.net • Planet Lisp (a Lisp \meta" blog) http://planet.lisp.org • Quicklisp https://www.quicklisp.org/beta/UNOFFICIAL/docs/ • Common Lisp Cookbook http://cl-cookbook.sourceforge.net/index.html • Lisp tutorials http://lisp.plasticki.com/show?36 • Peter Norvig on Python for Lisp programmers http://norvig.com/python-lisp.html 6/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Lisp Implementations In class, I'll be using SBCL and Lispworks • SBCL: http://www.sbcl.org/platform-table.html • Lispworks: http://www.lispworks.com/downloads/ • Allegro CL: http://franz.com/downloads/clp/survey • Others: ABCL, CMUCL, CLISP, OpenMCL, ECL, SCL https://common-lisp.net/~dlw/LispSurvey.html 7/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs John McCarthy John McCarthy was one of the founders of the discipline of ar- tificial intelligence. He coined the term "artificial intelligence" (AI), developed the Lisp programming language family, sig- nificantly influenced the design of the ALGOL programming language, popularized timesharing, and was very influential in the early development of AI. McCarthy received many acco- lades and honors, such as the Turing Award for his contribu- tions to the topic of AI, the United States National Medal of Science, and the Kyoto Prize. (from wikipedia) 8/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Lisp history and dialects • Lisp (LISt Processing) is the second oldest language (1958) still in common use. Fortran was created one year earlier. Thanks to its simple syntax (lists) and macros (to transform those lists), Lisp has been called a \programmable programming language." • Highly influential: Introduced if-then-else construct; garbage collection; read-eval-print loop; dynamic typing; incremental compilation; homoiconicity and meta-programming, closures (via Scheme)... • Multi-paradigm: functional, procedural, reflective, meta 9/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Lisp Machines { MIT AI Lab (circa 1975) 10/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Commercial Lisp Machines circa 1980-1990 TI Explorer LMI Lambda Symbolics 11/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Symbolics Keyboard 12/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Intro and history Lists, s-expressions, and cons cells Data types Evaluation Misc operations Variables and value binding Flow of control Defining functions Evaluation and the Read Emacs 13/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Lists as programs and data { key idea of Lisp Arithmetic expressions: (+ (* 3 4) (* 4 5)) Conditional expressions: (when (> x 4) (print "bigger than 4")) Flat and nested lists ("columbia" "yale" "dartmouth" "penn" "cornell") (0 (1 2 3) (3 4 5) (6 (7 8))) Association lists and property lists (("new jersey" :capital "trenton") ("alabama" :capital "montgomery") ("new york" :capital "albany") ...) Variable assignment: (setq x '((1 "one") (2 "two") (3 "three"))) Function definition: (defun cube (x) (* x x x)) 14/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Minimal syntax No special syntax for operators and statements { just functional application to arguments in lists (FUNCTION arg0 arg1 arg3 ....) For example: (+ 2 3 4 5) ) 14 Including nested: (+ 2 (* 3 4)5) ) 19 15/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs S-Expressions Lisp programs and data consist of s-expressions (Symbolic expressions) An s-expression can be an atom or list (including nested lists) • An atom can be a symbol, string, array, structure, number... • A list is sequence of cons cells linking s-expressions together Examples • (aaa 12 foo 44.0) is a flat list • (nil "hello" (99.0 1/2) foo) is a nested list • nil, "hello", 99.0, 1/2, and foo are all atoms. Lisp symbols are generally made upper case when they are read (print (list 1 2 3)) automatically becomes (PRINT (LIST 1 2 3)) 16/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Cons Cells { used to represent lists (a b c) • A cons cell is a pair of pointers { First part is the car and second part is the cdr • The car and cdr point to any s-expression • For a proper list, the CDR of last CONS cell points to nil • Can represent: flat lists, nested lists (trees), even circular lists and other structures. • Dots omitted when cdr is a list: '(a . (b . (c . nil))) ) (a b c) 17/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Cons Cells { used to represent lists (aardvark . nil) or (aardvark) (a b c) (a b c . d) Diagrams from https://www.cs.cmu.edu/~dst/LispBook/book.pdf 18/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Cons Cells for NESTED or SHARED lists ((BLUE SKY) (GREEN GRASS) (BROWN EARTH)) Two lists (TAKE A NAP) and (WHAT A NAP) sharing same (A NAP) 19/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Circular Lists are possible (setq cl '(a b c)) ) (a b c) (setf (cdddr cl) cl) ) (a b c a b c a b c a b c a b c a b c a b c a b c a b c a ...) Print length controlled by *PRINT-LENGTH* (setq cl '(a . a)) ) (a . a) (setf (car cl) cl) ) ((((((# . a) . a) . a) . a) . a) . a) Print depth controlled by *PRINT-LEVEL* 20/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Alists { association lists Alists provide a flexible lightweight way to store and retrieve data associations ((a . 1) (b . 2) (c . 3)) (defparameter *elephant-alist* '((:height . 10) (:color . gray) (:mammal? . t) (:locations . (africa asia)))) (cdr (assoc :color *elephant-alist*)) => gray 21/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Plists { property lists Plists provide another flexible lightweight way to store and retrieve data associations (a 1 b 2 c 3) (defparameter *elephant-plist* '(:height 10 :color gray :mammal? t :locations (africa asia))) (getf *elephant-plist* :locations) => (AFRICA ASIA) 22/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Intro and history Lists, s-expressions, and cons cells Data types Evaluation Misc operations Variables and value binding Flow of control Defining functions Evaluation and the Read-Eval-Print-Loop (REPL) Emacs 23/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Basic data types { each with their own test predicate Symbols: T, NIL, foo-1, system-error, *database*, foo.bar, sb-unix:unix-fstat (symbolp 'foo-1) ! T Numbers: 7, 33.33, #C(0.0 1.0), 343242342342342342 (numberp 33.0) ! T Strings: "artificial intelligence", "Lisp", "Barack Obama" (stringp 'foo) ! NIL Characters: #na, #nspace (characterp #nNEWLINE) ! T Lists: ((1 2 3) 4 5 (6 7 (8 9))) NIL is the empty list (), as well as being a symbol representing FALSE (listp '(a d)) ! T More: vectors, structs, hash tables, arrays, CLOS objects, ... (vectorp 343) ! nil ... etc 24/ 70 Intro Lists Types Evaluation Misc Variables Control Flow Defining Functions REPL Emacs Symbols Symbols have an associated name, value, function, property list.