420 likes | 516 Views
Computer Eng . Software Lab I I. 242-203 , Semester 2 , 2013-2014. Please ask questions. Functional Programming with Scheme. Who I am: Andrew Davison CoE, WiG Lab Office ad@fivedots.coe.psu.ac.th. Overview. 1 . Why Scheme? 2 . Constants (names) 3 . Functions 4 . Lists
E N D
Computer Eng.Software Lab II 242-203, Semester 2, 2013-2014 Please ask questions Functional Programming with Scheme Who I am: Andrew Davison CoE, WiG Lab Office ad@fivedots.coe.psu.ac.th
Overview 1. Why Scheme? 2. Constants (names) 3. Functions 4. Lists 5. No-name Functions: lambda 6. cond 7. Recursion continued
8. Higher Order Functions 9. Using DrScheme 10. More Information
1. Why Scheme? • Scheme is one of the simpler functional programming languages • a Scheme program is a collection of functions • Scheme also has assignment for greater programming flexibility • but it is not needed in most programs continued
Scheme has plenty of advanced features • e.g. first-class functions • function body code can be manipulated as data • data can be used as function body code • Scheme is used in lots of Artficial Intelligence (AI) projects and textbooks.
More details on how to use DrScheme are given in Section 9. 2. Constants (names) myPi is defined here myPi is evaluated then printed 'myPi is not evaluated 'pi is pre-defined
3. Functions • A function call is written as: (operator arg1 arg2 … argn) • For example: (+ 23) means 2 + 3
Function Call Examples The + operator (and other arithmetic) operators can take any number of arguments. The same as: (2+3)*(1+2)
Test Functions (Predicates) • Test functions return boolean values true or false. • Their names end with a '?' • e.g. number?char?
Defining Functions (v.1) Similar C code is:int sq(int x) { return x*x; }
Similar C code is:int myMax(int x,int y) { if (x > y) return x; else return y; }
Combining Functions • Scheme functions can be easily combined together • make a function call be the argument of another function function call arguments
4. Lists • List values are placed inside (list …): • (list ) // an empty list • (list 1 2 3) // a list of numbers • (list 'a 'b 'c) // a list of names • (list (list 1 2) (list 2 3 4)) // a list of two lists • If the language includes list abbreviations, then (list ...) can be written as '(...) • '(1 2 3) is the same as (list 1 2 3)
Basic List Operations • (null? x) • returns true is x is an empty list; otherwise returns false • (car x) • returns the first element (head) of a non-empty list x • (cdr x) • returns the tail of a non-empty list x • everything except the first element continued
(cadr x) • returns the head element of the tail of x • (cons h l) • makes a new list where the head is h, the tail is l • (list arg1 arg2 … argn) • places all of its arguments into a new list
plusList plusList pulls out the first two arguments of a list and adds them
Some Other Useful List Functions • (length x) • returns the length of a list x • (append x y) • makes a new list by appending list x onto the front of list y • (reverse x) • makes a list by reversing the list x and many, many more... continued
combining reverse and append
5. No-name Functions: lambda Similar to a C-like function call: ??(3) Similar to the C-like code: int ??(int x) { return x *x; } The language 'level' must be increased for lambda to be supported.
Defining Functions (v.2) Similar to the C-like code: sq2 = int ??(int x) { return x * x; }
Why have lambda? • For simple examples (like ours), there is no need for lambda. • lambda becomes very useful in higher order programming, where data and functions need to be translated into each other • e.g. parsing, AI
6. cond: the multi-branch if Similar to the C code: int sizer(int x) { if (x == 0) return 0; else if (x > 0) return 1; else return -1; }
7. Recursion • Base case: • the function returns an answer and stops • Recursion step: • the body of the function calls itself (with smaller arguments)
length Defined base case recursive step
member Defined mem? is a predicate (a test function) mem is the wrong name
8. Higher Order Functions An ‘Intermediate Student’ feature • A higher order function has 1 or more arguments which are function names • higher order functions are also called functionals • Higher order functions are very important to advanced functional programming and AI.
apply • (apply f x) • its first argument, f, is a function name • its second argument, x, is the input for f • same as executing (f x)
map • (map f x) • returns a list by applying the function f to each element of the list x
map and plusList plusList is applied to the 4 lists in the input list.
9. Using DrScheme • Download the installation program for DrScheme from: http://fivedots.coe.psu.ac.th/ Software.coe/LAB/FuncProg/ • The filename: plt-4.1.4-bin-i386-win32.exe • Installs on Windows XP or later • the installation is called PLT Scheme, v4.1.4
Start DrScheme from the Windows Start menu item PLT Scheme: definitions go here execute functions here
Some Notes • Set the language mode to “Beginning Student with List Abbreviations” • under the Language > Choose Language menu item continued
Press the "Run" button after adding a new function to the definitions window • this makes the new function visible down in the execution window
Create a Scheme Program using any text editor
Load myMax.scm use the File/Open menu item Press the "Run" button for the execution window to appear at thebottom.
Alternatively, you can type the function into DrScheme's definition window, and save it from there. • you get colour-coded syntax, indenting (tabbing), and error checking as you type
10. More Information • The "Help/ Help Desk" menu item:
PLT Scheme Racket • PLT Scheme v.5 was renamed to be called Racket • two websites: • http://plt-scheme.org/ (frozen in 2010) • http://racket-lang.org/ (active) • At the beginner's level (i.e. for us), there's no difference between the two languages.