CS 330 Programming Languages 11 / 15 / 2007 Instructor: Michael Eckmann.

Slides:



Advertisements
Similar presentations
CS 206 Introduction to Computer Science II 09 / 05 / 2008 Instructor: Michael Eckmann.
Advertisements

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.
1 Copyright © 1998 by Addison Wesley Longman, Inc. Chapter 14 Functional Programming Languages - The design of the imperative languages is based directly.
CSE 3341/655; Part 4 55 A functional program: Collection of functions A function just computes and returns a value No side-effects In fact: No program.
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.
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.
1-1 An Introduction to Scheme March Introduction A mid-1970s dialect of LISP, designed to be a cleaner, more modern, and simpler version than.
CS 330 Programming Languages 10 / 14 / 2008 Instructor: Michael Eckmann.
CS 330 Programming Languages 10 / 16 / 2008 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 01 / 30 / 2008 Instructor: Michael Eckmann.
1 Chapter 4 Language Fundamentals. 2 Identifiers Program parts such as packages, classes, and class members have names, which are formally known as identifiers.
CS 330 Programming Languages 10 / 11 / 2007 Instructor: Michael Eckmann.
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.
CS 106 Introduction to Computer Science I 02 / 12 / 2007 Instructor: Michael Eckmann.
CS 330 Programming Languages 11 / 20 / 2007 Instructor: Michael Eckmann.
Chapter 15 Functional Programming Languages. Copyright © 2007 Addison-Wesley. All rights reserved. 1–2 Introduction Design of imperative languages is.
ISBN Chapter 15 Functional Programming Languages Mathematical Functions Fundamentals of Functional Programming Languages Introduction to.
CS 330 Programming Languages 11 / 18 / 2008 Instructor: Michael Eckmann.
CS 330 Programming Languages 11 / 16 / 2006 Instructor: Michael Eckmann.
CS 330 Programming Languages 11 / 13 / 2007 Instructor: Michael Eckmann.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
ISBN Chapter 15 Functional Programming Languages.
ISBN Chapter 15 Functional Programming Languages.
(5.1) COEN Functional Languages  Functional programming basics  Atoms and lists; cons  Useful primitive functions  Predicates  Arithmetic functions.
LISP 1.5 and beyond A very quick tour. Data Atoms (symbols) including numbers – All types of numbers including Roman! (well, in the early days) – Syntactically.
CS 330 Programming Languages 11 / 14 / 2006 Instructor: Michael Eckmann.
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.
CS 330 Programming Languages 11 / 21 / 2006 Instructor: Michael Eckmann.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 7.
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,
Java Programming: From Problem Analysis to Program Design, 4e Chapter 2 Basic Elements of Java.
CS 330 Programming Languages 11 / 13 / 2008 Instructor: Michael Eckmann.
Operators Precedence - Operators with the highest precedence will be executed first. Page 54 of the book and Appendix B list C's operator precedence. Parenthesis.
ISBN Chapter 15 Functional Programming Languages.
CS 376b Introduction to Computer Vision 01 / 23 / 2008 Instructor: Michael Eckmann.
ISBN Chapter 15 Functional Programming Languages.
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.
ISBN Chapter 15 Functional Programming Languages.
CS 330 Programming Languages 11 / 11 / 2008 Veterans Day Instructor: Michael Eckmann.
LISP Data Types Functional Programming Academic Year Alessandro Cimatti
CS535 Programming Languages Chapter - 10 Functional Programming With Lists.
Lecture 2 Conditional Statement. chcslonline.org Conditional Statements in PHP Conditional Statements are used for decision making. Different actions.
CS 330 Programming Languages 11 / 28 / 2006 Instructor: Michael Eckmann.
CS 330 Programming Languages 10 / 23 / 2007 Instructor: Michael Eckmann.
1 FP Foundations, Scheme In Text: Chapter Chapter 14: FP Foundations, Scheme Mathematical Functions Def: A mathematical function is a mapping of.
ISBN Chapter 15 Functional Programming Languages.
CS 106 Introduction to Computer Science I 09 / 10 / 2007 Instructor: Michael Eckmann.
CSE 425: Functional Programming I Programs as Functions Some programs act like mathematical functions –Associate a set of input values from the function’s.
Comparative Programming Languages Functional programming with Lisp/Scheme.
1 Agenda  Unit 7: Introduction to Programming Using JavaScript T. Jumana Abu Shmais – AOU - Riyadh.
CS314 – Section 5 Recitation 9
CS314 – Section 5 Recitation 10
Functional Programming Languages
Functional Programming
History of Computing – Lisp
CS 326 Programming Languages, Concepts and Implementation
Chapter 15 – Functional Programming Languages
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
Java Programming: From Problem Analysis to Program Design, 4e
FP Foundations, Scheme In Text: Chapter 14.
Functional Programming Languages
Announcements Quiz 5 HW6 due October 23
Lisp.
Presentation transcript:

CS 330 Programming Languages 11 / 15 / 2007 Instructor: Michael Eckmann

Michael Eckmann - Skidmore College - CS Fall 2007 Today’s Topics Questions / comments? Chapter 6 –Pointers solutions to memory leaks Functional programming –Scheme

Michael Eckmann - Skidmore College - CS Fall 2007 Pointers Solutions to memory leakage problem –Reference counters Store a reference counter for each memory cell whose value is the number of pointers currently pointing to it. When pointers change value or are destroyed, the counter is decremented. It is also checked to see if it is zero. If it is, then the memory can be reclaimed. –Any drawbacks to this method?

Michael Eckmann - Skidmore College - CS Fall 2007 Pointers Solutions to memory leakage problem –Reference counters (continued) Any drawbacks to this method? –Space –Time –Circular references

Michael Eckmann - Skidmore College - CS Fall 2007 Pointers Solutions to memory leakage problem (continued) –Garbage collection Every heap cell needs a bit or possibly a field as a flag to indicate whether or not it contains garbage. When want to reclaim memory the garbage collector will –1. Set all the flags as “containing garbage” –2. Go through the program and determine all the memory that is being pointed to --- and changes the flags for those cells as “not containing garbage” –3. All the ones still marked as “containing garbage” are reclaimed. –All preceding discussion assumed that the heap cells were all the same size. Major difficulties arise when non-uniform size cells are used. Why?

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Read the paper “Why Functional Programming Matters” (1984) by John Hughes found here: (contains a link to a pdf of the paper.) Please read before Tuesday the 20th so we can discuss it together as a class along with the first 5 sections of chapter 15. Suggestions on reading this paper (or any technical paper) –If you don't understand something after a little thought, that's o.k. continue on to get the gist of the whole thing then, come back to what wasn't understood.

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Let's look at a webpage that contains some good bullet points regarding functional programming in general.

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Static scoping exclusively –Small size –Functions are first-class citizens Can be values of expressions Can be elements of lists Can be assigned to variables Can be passed as parameters –small, simple syntax --- consistent syntax –simple semantics

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme Note that the textbook uses capital letters for the keywords in the language and we will do the same on the slides, but when we code using DrScheme this is not necessary.

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Expressions are evaluated by the function EVAL –Literals evaluate to themselves –Function calls are evaluated by First evaluate all the parameter expressions Then evaluate the function after the values of the parameters are known The value of the last expression in the body is the value of the function (sound familiar?) All but the last should be familiar to imperative programmers.

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Primitive functions Arithmetic: +, -, *, /, ABS, SQRT, REMAINDER, MIN, MAX e.g., (+ 5 2) yields 7 what would (- 24 (* 5 3)) yield? If * is given no parameters, it returns 1 (multiplicative identity.) If + is given no parameters, it returns 0 (additive identity.)

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Primitive functions If – is given more than two parameters, it acts as if the second through the last are summed and this sum is subtracted from the first. If / is given more than two parameters, it acts as if the second through the last are multiplied together and this product is divided into the first.

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Primitive functions QUOTE -takes one parameter; returns the parameter without evaluation QUOTE is required because the Scheme interpreter, named EVAL, always evaluates parameters to function applications before applying the function. QUOTE is used to avoid parameter evaluation when it is not appropriate QUOTE can be abbreviated with the apostrophe prefix operator e.g., '(A B) is equivalent to ( QUOTE (A B))

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –If you wanted a list with the symbols / 8 4 in that order and you did this: (/ 8 4) Scheme would evaluate that as a function and the result will be 2 –So, to have the list not be evaluated, use the QUOTE: '(/ 8 4) Scheme gives us the list with those three elements; no evaluation occurs. alternatively (QUOTE (/ 8 4))

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –(DEFINE hello 5.6) –If you wanted the symbol hello instead of the value in some constant named hello 'hello vs. hello –The first one gives us hello –The second one evaluates to 5.6

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme CAR takes a list parameter; returns the first element of that list e.g., (CAR '(A B C)) yields A (CAR '((A B) C D)) yields (A B) CDR takes a list parameter; returns the list after removing its first element e.g., (CDR '(A B C)) yields (B C) (CDR '((A B) C D)) yields (C D)

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme CONS takes two parameters, the first of which can be either an atom or a list and the second of which is a list; returns a new list that includes the first parameter as its first element and the second parameter as the remainder of its result e.g., (CONS 'A '(B C)) returns (A B C) (CONS '(A B) '(B C)) returns ((A B) B C) LIST - takes any number of parameters; returns a list with the parameters as elements

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –DEFINE – used to create programmer-defined functions / or bind names to values of expressions –When names are bound to values of expressions they are NOT variables, instead they are named constants. –Either two atoms as parms, or two lists. –Example when two atoms are given (creates a named constant): (DEFINE games_in_season 162)

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –DEFINE – used to create programmer-defined functions / or bind names to values of expressions –The form when two lists are given binds the expressions collectively as a function to a function name and its parameters: (DEFINE (func_name parameters) expression {expression} ) –Examples on next slide

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme –Examples: (DEFINE (square x) (* x x)) (DEFINE (hypotenuse side1 side1) (SQRT (+ (square side1) (square side2))) ) What would these look like as imperative language functions?

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –Examples: (DEFINE (mystery m) (CAR (CDR m))) What does this function do? How is it called?

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –Examples: (DEFINE (mystery m) (CAR (CDR m))) What does this function do? CDR returns the list remaining after first element removed CAR returns the first element of a list so, a CAR of a CDR is the second element How is it called? (mystery '(W X Y Z))

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –Numeric “predicate” functions return a Boolean –#T or #F –=, <>, >, =, <=, EVEN?, ODD?, ZERO? –our textbook says that empty list () is considered #F and any non-empty list is considered #T (this differs from other Scheme documentation which says #F is false, and all other objects are treated as true (e.g. (), “false”, 3, nil are all considered true) –Symbolic Atoms and Lists “predicate” functions –EQ?, LIST?, NULL?, EQUAL?

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –There is a difference between = eq? equal? –= is used for numeric comparison –eq? is used for symbol/atom comparison –equal? is used for symbol/atom or list comparison There's more to it than what I say above ---- I'll photocopy some examples and their results for eq?, equal? and eqv? for your edification.

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –=, <>, >, =, <=, EVEN?, ODD?, ZERO? –EQ?, LIST?, NULL?, EQUAL? –Examples: (= n 0) (NULL? somelist) (EQ? 'A (CAR somelist)) (LIST? '() ) (EQUAL? '(a b z) '(a b z))

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –and, or, not –Examples: (or (= n 0) (= n 1)) (not (= n 0)) (and (eq? 'a (car lis)) (= y 1))

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –input / output –(read) –(display "Hello World") –(write "Hello World") –(define x 5) –(write x)

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Scheme –IF takes three parms (IF predicate then_expression else_expression ) –COND – is like switch / case statements (COND ( predicate1 expression { expression } ) ( predicate2 expression { expression } )... ( predicaten expression { expression } ) ( ELSE expression { expression } ) )

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming COND –Predicates are evaluated in order until one is #T –Then the expressions that follow that first #T predicate are evaluated and the value of the last one evaluated is the returned value. –If no predicate is #T, then COND returns (), the empty list. –ELSE at the end acts like a default if none of the other predicates are true it will evaluate that one. –Can you see any differences or similarities to switch statements in Java and C++?

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming COND –Can you see any differences or similarities to switch statements in Java and C++? –In COND, there are implied “breaks” after each predicate (case.)

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme Recursion –Scheme programmers typically use recursion in Scheme whenever possible

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Example of a function containing an IF (DEFINE (factorial n) (IF (= n 0) 1 (* n (factorial (- n 1))) )

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Example of a function containing a COND (DEFINE (compare x y) (COND ( (> x y) ( DISPLAY “x is > y” )) ( (< x y) ( DISPLAY “x is < y” )) ( ELSE ( DISPLAY “x is = y” ) )

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Want to try to write a function that determines whether an atom is in a particular list? e.g. (member 'B '(A B C)) should return #T and (member 'X '(A B C)) should return #F.

Michael Eckmann - Skidmore College - CS Fall 2007 Functional Programming Want to try to write a function that determines whether an atom is in a particular list? e.g. (member 'B '(A B C)) should return #T and (member 'X '(A B C)) should return () (which is #F.) (DEFINE (member atm lis) (COND ((NULL? lis) #F) ((EQ? atm (CAR lis)) #T) (ELSE ( member atm (CDR lis))) )

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme when writing functions dealing with a list lis, if you want to go through the elements one at a time, use (car lis) to get the first and recurse on (cdr lis) also, you'll need to tell your function when to stop, that is, when the list is null, so (null? lis) should be the first thing you check. In general recursive functions need to 1st check the base case (the case that will be true when the recursion should stop) and in the recursive step(s) make sure that the function is working towards the base case (What do I mean here?)

Michael Eckmann - Skidmore College - CS Fall 2007 Scheme Let's run DrScheme and try some things out. While we're coding, as I introduce any new built-in functions or anything we haven't seen before I'll explain what they are. I'll then save the code and post it.