Gal Oz Based on: John Mitchell’s Presentation and book.

Slides:



Advertisements
Similar presentations
Lisp. Versions of LISP Lisp is an old language with many variants Lisp is alive and well today Most modern versions are based on Common Lisp LispWorks.
Advertisements

C-LISP. LISP 2 Lisp was invented by John McCarthy in 1958 while he was at the Massachusetts Institute of Technology (MIT).John McCarthyMassachusetts Institute.
1 Scheme and Functional Programming Aaron Bloomfield CS 415 Fall 2005.
Adapted from Scott, Chapter 6:: Control Flow Programming Language Pragmatics Michael L. Scott.
Scheme in Scheme. Why implement Scheme in Scheme  Implementing a language is a good way to learn more about programming languages  Interpreters are.
1 Programming Languages (CS 550) Lecture Summary Functional Programming and Operational Semantics for Scheme Jeremy R. Johnson.
Functional Programming. Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends.
Lambda Calculus and Lisp PZ03J. Lambda Calculus The lambda calculus is a model for functional programming like Turing machines are models for imperative.
Chapter 3 Functional Programming. Outline Introduction to functional programming Scheme: an untyped functional programming language.
Programming Languages Marjan Sirjani 2 2. Language Design Issues Design to Run efficiently : early languages Easy to write correctly : new languages.
CS 355 – PROGRAMMING LANGUAGES Dr. X. Apply-to-all A functional form that takes a single function as a parameter and yields a list of values obtained.
INF 212 ANALYSIS OF PROG. LANGS Type Systems Instructors: Crista Lopes Copyright © Instructors.
1 Functional programming Languages And a brief introduction to Lisp and Scheme.
ALGOL 60 Design by committee of computer scientists: Naur, Backus, Bauer, McCarthy, van Wijngaarden, Landin, etc. Design by committee of computer scientists:
Lisp. Versions of LISP Lisp is an old language with many variants –LISP is an acronym for List Processing language Lisp is alive and well today Most modern.
Functional programming: LISP Originally developed for symbolic computing Main motivation: include recursion (see McCarthy biographical excerpt on web site).
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
ISBN Chapter 15 Functional Programming Languages Mathematical Functions Fundamentals of Functional Programming Languages Introduction to.
Introductory Lisp Programming Lecture # 2 Main Topics –Basic Lisp data types –Lisp primitives –Details of list handling Cons cells (boxes) & their representation.
Common Lisp Derek Debruin Mark Larue Vinh Doan. Problem Domains There was a need in the early 1960s to define a programming language whose computational.
The environment of the computation Declarations introduce names that denote entities. At execution-time, entities are bound to values or to locations:
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
SchemeCOP Introduction to Scheme. SchemeCOP Scheme Meta-language for coding interpreters –“ clean ” semantics Scheme = LISP + ALGOL –simple.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
Lisp John Mitchell CS 242 Reading: Chapter 3 Homework 1: due Oct 3.
Copyright © 2009 Elsevier Chapter 10 :: Functional Languages Programming Language Pragmatics Michael L. Scott.
Functional Programing Referencing material from Programming Language Pragmatics – Third Edition – by Michael L. Scott Andy Balaam (Youtube.com/user/ajbalaam)
Slide 1 Vitaly Shmatikov CS 345 Introduction to Scheme.
Functional Programming Universitatea Politehnica Bucuresti Adina Magda Florea
Programming Languages –14 David Watt (Glasgow) Steven Wong (Singapore) Moodle : Computing Science → Level 3 → Programming Languages 3 © 2012 David.
Functional Programming in Scheme
ISBN Chapter 15 Functional Programming Languages.
Functional Programming in Scheme and Lisp. Overview In a functional programming language, functions are first class objects. You can create them, put.
CSE S. Tanimoto Lambda Calculus 1 Lambda Calculus What is the simplest functional language that is still Turing complete? Where do functional languages.
Principles of Programming Languages Lecture 1 Slides by Daniel Deutch, based on lecture notes by Prof. Mira Balaban.
1 COMP313A Functional Programming (1). 2 Main Differences with Imperative Languages Say more about what is computed as opposed to how Pure functional.
Λ => Scheme for Rubyists. Scheme History Authors: Guy Steele and Gerald Sussman Structure and Interpretation of Computer Programs (SICP) by Abelson &
Introduction to Scheme CS 480/680 – Comparative Languages “And now for something completely different…” – Monty Python “And now for something completely.
Functional Programming and Lisp. Overview In a functional programming language, functions are first class objects. In a functional programming language,
Midterm Review John Mitchell CS 242. Midterm uThurs Nov 7, 7-9PM Terman Aud Closed book uClass schedule Thurs Oct 31, Tues Nov 5 – topics not on midterm.
Chapter Fifteen: Functional Programming Languages Lesson 12.
ISBN Chapter 15 Functional Programming Languages.
1 Chapter 15 © 2002 by Addison Wesley Longman, Inc Introduction - The design of the imperative languages is based directly on the von Neumann architecture.
TIVDM2Functional Programming Language Concepts 1 Concepts from Functional Programming Languages Peter Gorm Larsen.
Principles of Programming Languages Lecture 1 Slides by Yaron Gonen, based on slides by Daniel Deutch and lecture notes by Prof. Mira Balaban.
Programming Languages
Lisp John Mitchell CS 242. Lisp, 1960 uLook at Historical Lisp Perspective –Some old ideas seem old –Some old ideas seem new Example of elegant, minimalist.
Milos Hauskrecht (PDF) Hieu D. Vu (PPT) LISP PROGARMMING LANGUAGE.
1 Scheme (Section 11.2) CSCI 431 Programming Languages Fall 2003.
Lisp John Mitchell CS 242 Reading: Chapter 3 Homework 1: due Oct 6.
1 FP Foundations, Scheme In Text: Chapter Chapter 14: FP Foundations, Scheme Mathematical Functions Def: A mathematical function is a mapping of.
Copyright © 2009 Elsevier Chapter 10 :: Functional Languages Programming Language Pragmatics Michael L. Scott.
Names, Scope, and Bindings Programming Languages and Paradigms.
Copyright © 2009 Elsevier Chapter 6:: Control Flow Programming Language Pragmatics Michael L. Scott.
Ch Ch jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (n-n-n-notes) Summer 2003 Dr. Carter Tiernan.
CS314 – Section 5 Recitation 9
Operational Semantics of Scheme
Functional Programming
Functional Programming Languages
Zuse’s Plankalkül – 1945 Never implemented Problems Zuse Solved
CS 3304 Comparative Languages
Introduction to Scheme
Scheme : variant of LISP
The Metacircular Evaluator
FP Foundations, Scheme In Text: Chapter 14.
The Metacircular Evaluator
The Metacircular Evaluator (Continued)
6.001 SICP Variations on a Scheme
topics interpreters meta-linguistic abstraction eval and apply
Lisp.
Presentation transcript:

Gal Oz Based on: John Mitchell’s Presentation and book. Lisp Gal Oz Based on: John Mitchell’s Presentation and book.

Agenda Characteristics (good language ideas): Properties: Motivation application Abstract machine Theoretical foundation Properties: Functional programming Dynamic typing, strongly typed Implantation: Basic functions, basic usage Types and Data model Garbage collection and other good concepts

Lisp usage today: AI programming First language teaching – because its elegant and minimalist language A lot of open source programming (open source libraries and application) Emacs editor gtk graphical toolkit (linux) Scripting language (Emacs/ AutoCad and more)

Lisp summary Many different dialects Simple syntax Lisp 1.5, Maclisp, …, Scheme, ... CommonLisp has many additional features This presentation: a fragment of Lisp 1.5, approximately But ignore static/dynamic scope until later in course Simple syntax (+ 1 2 3) (+ (* 2 3) (* 4 5)) (f x y) Easy to parse (Looking ahead: programs as data)

Lisp, 1960 Look at Historical Lisp Supplementary reading (optional) Perspective Some old ideas seem old Some old ideas seem new Example of elegant, minimalist language Not C, C++, Java: a chance to think differently Illustrate general themes in language design Supplementary reading (optional) McCarthy, Recursive functions of symbolic expressions and their computation by machine, CACM, Vol 3, No 4, 1960.

John McCarthy Pioneer in AI Also Lisp Formalize common-sense reasoning Proposed timesharing Mathematical theory …. Lisp stems from interest in symbolic computation (math, logic)

McCarthy’s 1960 Paper Interesting paper with Important concepts Good language ideas, succinct presentation Some feel for historical context Insight into language design process Important concepts Interest in symbolic computation influenced design Use of simple machine model Attention to theoretical considerations Recursive function theory, Lambda calculus Various good ideas: Programs as data, garbage collection

Motivation for Lisp Advice Taker Symbolic integration, differentiation Process sentences as input, perform logical reasoning Symbolic integration, differentiation expression for function --> expression for integral (integral ‘(lambda (x) (times 3 (square x)))) Motivating application part of good lang design Keep focus on most important goals Eliminate appealing but inessential ideas Lisp symbolic computation, logic, experimental prog. C Unix operating system Simula simulation PL/1 “kitchen sink”, not successful in long run

Abstract Machine Concept of abstract machine: Examples Idealized computer, executes programs directly Capture programmer’s mental image of execution Not too concrete, not too abstract Examples Fortran Flat register machine; memory arranged as linear array No stacks, no recursion. Algol family Stack machine, contour model of scope, heap storage Smalltalk Objects, communicating by messages.

Execution Model (Abstract Machine) Language semantics must be defined Too concrete Programs not portable, tied to specific architecture Prohibit optimization (e.g., C eval order undefined in expn) Too abstract Cannot easily estimate running time, space (difficult to write efficient code) Lisp: IBM 704, but only certain ideas … Address, decrement registers -> cells with two parts Garbage collection provides abstract view of memory

Theoretical Considerations McCarthy’s description “ … scheme for representing the partial recursive functions of a certain class of symbolic expressions” Lisp uses Concept of computable (partial recursive) functions Want to express all computable functions Function expressions known from lambda calculus (developed A. Church) lambda calculus equivalent to Turing Machines, but provide useful syntax and computation rules

Functional programming Pure functions Function are variable like strings and numbers. There aren’t any free variables that influence on the machine state. Therefore no side-effects Every new proceeding of data generate a new data. this simplify proofs First-class and higher-order functions Function can be delivered and import trough other functions. That mean that you can get function as a variable and execute her Recursion high usage In recursion

Dynamic typing Type checking is performed at run-time as opposed to at compile-time slow operation vs. more flexible In dynamic typing, values have types but variables do not that is, a variable can refer to a value of any type Scheme is statically scoped variant of lisp

Strongly typed preventing the compiling or running of source code which uses data in what is considered to be an invalid way an integer division operation may not be used upon strings The Lisp system detects these errors, terminates evaluation and print an error massage to the screen Strongly typed may result in runtime type errors. The Lisp system detects these errors, terminates evaluation and print an error massage to the screen.

Example C like: Lisp: Int a = 2; Char b = ‘2‘; #concatenate(a, b) # Type Error #add(a, b) # Type Error concatenate(str(a), b) # Returns '22' add(a, int(b)) # Returns 4 Lisp: (+ ‘(2) 2) # Type Error

Innovations in the Design of Lisp Expression-oriented function expressions conditional expressions Unique if-then-else expression structure. recursive functions Abstract view of memory Cells instead of array of numbered locations Garbage collection Programs as data (first homoiconic language) Higher-order functions Recursive function

Parts of Speech Statement load 4094 r1 Expression (x+5)/2 Imperative command Alters the contents of previously-accessible memory Expression (x+5)/2 Syntactic entity that is evaluated Has a value, need not change accessible memory If it does, has a side effect Declaration integer x Introduces new identifier May bind value to identifier, specify type, etc.

Types: Atoms and Pairs Atoms include numbers, indivisible “strings” <atom> ::= <smbl> | <num> <smbl> ::= <char> | <smbl><char> | <smbl><digit> <num> ::= <digit> | <num><digit> Dotted pairs (the basic data structure) Write (A . B) for pair Symbolic expressions, called S-expressions: <sexp> ::= <atom> | (<sexp> . <sexp>)

Lisp Memory Model Cons cells Atoms and lists represented by cells Address Decrement Cons cells Atoms and lists represented by cells Atom A Atom B Atom C

Sharing (a) (b) Both structures could be printed as ((A.B) . (A.B)) Which is result of evaluating (cons (cons 'A 'B) (cons 'A 'B)) ? A B A B A B Note: Scheme actually prints using combination of list and dotted pairs

Basic Functions Functions on atoms and pairs: cons – combine two atoms or lists. (cons (quote A) (quote B)) => pair of atoms “A” and “B” (cons a b) => pair containing the value of a and b. car – content of the address register. (car(list 1 2 3)) => 1 cdr - content of the decrement register. (cdr(list 1 2 3)) => (2 3) eq – an equality test. (eq ‘1 (car(list (‘1 ‘2)))) => T atom – test if whether this argument is an atom. (atom (list 1 2)) => nil

Basic Functions Declarations and control: cond – conditional expression (more to come). lambda - defining function declaration. (lambda (x) (cond ((atom x) x) (T (cons ‘A x)))) function f(x) = if atom(x) then x else cons(‘A’,x) define/defun – defined new variable (string number or function). (defun factorial lambda (n) (cond ((<= n 1) 1) (T (* n (factorial (- n 1))))) eval – evaluate an expression. (eval (‘3)) => 3

Basic Functions More declarations and control function: quote or ‘ – take a single argument and return it verbatim. ‘(+ a b)=> (+ a b) Functions with side-effects rplaca – replace the address register value. (rplacea (list 1 2) 3) => (3 2) rplacd - replace the decrement register value. (rplaced (list 1 2) 3) => (1 3)

Examples (+ 4 5) (+ (+ 1 2) (+ 4 5)) (cons (quote A) (quote B)) expression with value 9 (+ (+ 1 2) (+ 4 5)) evaluate 1+2, then 4+5, then 3+9 to get value (cons (quote A) (quote B)) pair of atoms A and B (quote (+ 1 2)) evaluates to list (+ 1 2) '(+ 1 2) same as (quote (+ 1 2))

Cond – conditional Functions (cond (p1 e1) ... (pn en) ) Is the same as: if p1 then e1 else if p2 then e2 … else if pn then en proceed from left to right. stop at the first pi thats pi =true. When find the first pi with value true, eval this ei

Conditional Expressions in Lisp Generalized if-then-else (cond (p1 e1) (p2 e2) … (pn en) ) Evaluate conditions p1 … pn from left to right If pi is true, then evaluate ei Value of ei is value of expression No value for the expression if no pi true, or p1 … pi false and pi+1 has no value, or relevant pi true and ei has no value Conditional statements in assembler Conditional expressions apparently new in Lisp

Examples (cond ((< 2 1) 2) ((< 1 2) 1)) has value 1 has no value (cond (diverge 1) (true 0)) no value, if expression diverge loops forever (cond (true 0) (diverge 1)) has value 0

Evaluation of Expressions Read-eval-print loop Function call (function arg1 ... argn) evaluate each of the arguments pass list of argument values to function Special forms do not eval all arguments Example (cond (p1 e1) ... (pn en) ) proceed from left to right find the first pi with value true, eval this ei Example (quote A) does not evaluate A

Function Expressions Form Syntax comes from lambda calculus: (lambda ( parameters ) ( function_body ) ) Syntax comes from lambda calculus: f. x. f (f x) (lambda (f) (lambda (x) (f (f x)))) Defines a function but does not give it a name t ( (lambda (f) (lambda (x) (f (f x)))) (lambda (x) (+ 1 x))) )

Example (define twice (lambda (f) (lambda (x) (f (f x)))) ) (define inc (lambda (x) (+ 1 x))) ((twice inc) 2)  4

Strictness An operator or expression form is strict if it can have a value only if all operands or subexpressions have a value. Lisp cond is not strict, but addition is strict (cond (true 1) (diverge 0)) (+ e1 e2) Details: (define loop (lambda (x) (loop x))) diverge  (loop ())

Garbage Collection Garbage: Garbage Collection: At a given point in the execution of a program P, a memory location m is garbage if no continued execution of P from this point can access location m. Garbage Collection: Detect garbage during program execution GC invoked when more memory is needed Decision made by run-time system, not program This can be very convenient. For example: in building text-formatting program, ~40% of programmer time wasted on memory management.

Examples (car (cons ( e1) ( e2 ) )) Cells created in evaluation of e2 may be garbage, unless shared by e1 or other parts of program ((lambda (x) (car (cons (… x…) (... x ...))) '(Big Mess)) The car and cdr of this cons cell may point to overlapping structures.

Mark-and-Sweep Algorithm Assume tag bits associated with data Need list of heap locations named by program Algorithm: Set all tag bits to 0. Start from each location used directly in the program. Follow all links, changing tag bit to 1 Place all cells with tag = 0 on free list

Why Garbage Collection in Lisp? McCarthy's paper says this is “… more convenient for the programmer than a system in which he has to keep track of and erase unwanted lists." Does this reasoning apply equally well to C? Is garbage collection "more appropriate" for Lisp than C? Why?

Programs As Data Programs and data have same representation Eval function used to evaluate contents of list Example: substitute x for y in z and evaluate (define substitute (lambda (x y z) (cond ((null z) z) ((atom z) (cond ((eq z y) x ) (true z))) (true (cons (substitute x y (car z)) (substitute x y (cdr z))))))) (define substitute-and-eval (lambda (x y z) (eval (substitute x y z)))) (substitute-and-eval '3 'x '(+ x 1))

Examples Suppose you want to write a function that takes a number n and returns a function that adds n to its argument. (defun addn (n) ‘(lambda (x) (+ x n) ) ) To run it: ((addn(5)) 2) => 7 How do you do it in c?

Recursive Functions Want expression for function f such that Try (f x) = (cond ((eq x 0) 0) (true (+ x (f (- x 1))))) Try (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1)))))) but f in function body is not defined. McCarthy's 1960 solution was operator “label” (label f (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1 )))))))

Recursive vs. non-recursive declarations Recursive definition (define f (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1 ))))))) Legal Scheme: treats inner f as function being defined Non-recursive definition (define x (+ x 2)) Error if x not previously defined While evaluating arguments to + in expression (+ x 2): Unbound variable: x ABORT: (misc-error)

Higher-Order Functions Function that either takes a function as an argument returns a function as a result Example: function composition (define compose (lambda (f g) (lambda (x) (f (g x))))) Example: maplist (define maplist (lambda (f x) (cond ((null x) ()) (true (cons (f (car x)) (maplist f (cdr x ) ))))))

Example Scheme preamble: (define inc (lambda (x) (+ x 1))) (maplist inc '(1 2 3)) (2 3 4) Scheme preamble: (define true #t) (define false #f) (define eq eq?) (define null null?)

Efficiency and Side-Effects Pure Lisp: no side effects Additional operations added for “efficiency” (rplaca x y) replace car of cell x with y (rplacd x y) replace cdr of cell x with y What does “efficiency” mean here? Is (rplaca x y) faster than (cons y (cdr x)) ? Is faster always better?

Example (define p '(A B)) (rplaca p 'C) (rplacd p 'D) p  (C . D) Scheme preamble (define rplaca set-car!) (define rplacd set-cdr!)

Lisp inheritors today: Two major dialects for general-purpose programming today: Common Lisp, Scheme, LISP, , Logo, Clojure,ISLISP, Newlisp, Arc, SKILL, Racket Scripting language dialects: Emacs lisp AutoCad (AutoLISP) Many influenced languge ML, Perl, Python, Smalltalk, Ruby, Dylan, Haskell, Mathematica, Rebol, Qi, Lua, JavaScript, LPC, Forth, Nu, OPS5, CLU, Falcon, Io, Ioke

Summary: Contributions of Lisp Successful language symbolic computation, experimental programming Specific language ideas Expression-oriented: functions and recursion Lists as basic data structures Programs as data, with universal function eval Stack implementation of recursion via "public pushdown list" Idea of garbage collection.

Language speeds www.bagley.org/~doug/shoutout: Completely Random and Arbitrary Point System

Lots of Irritating Superfluous Parentheses Lisp Lots of Irritating Superfluous Parentheses Who wrote the language?

The END Presentation by: Gal Oz Based on: John Mitchell’s Presentation and book. Thanks to: Wikipedia, Puder Avi, xkcd, Gidon Eitan, Itay Abraham and http://www.apl.jhu.edu/~hall/lisp.html