1 / 42

Computer Eng . Software Lab I I

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

leanne
Download Presentation

Computer Eng . Software Lab I I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Overview 1. Why Scheme? 2. Constants (names) 3. Functions 4. Lists 5. No-name Functions: lambda 6. cond 7. Recursion continued

  3. 8. Higher Order Functions 9. Using DrScheme 10. More Information

  4. 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

  5. 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.

  6. 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

  7. 3. Functions • A function call is written as: (operator arg1 arg2 … argn) • For example: (+ 23) means 2 + 3

  8. Function Call Examples The + operator (and other arithmetic) operators can take any number of arguments. The same as: (2+3)*(1+2)

  9. Test Functions (Predicates) • Test functions return boolean values true or false. • Their names end with a '?' • e.g. number?char?

  10. Defining Functions (v.1) Similar C code is:int sq(int x) { return x*x; }

  11. Similar C code is:int myMax(int x,int y) { if (x > y) return x; else return y; }

  12. Combining Functions • Scheme functions can be easily combined together • make a function call be the argument of another function function call arguments

  13. 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)

  14. 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

  15. (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

  16. List Operation Examples

  17. plusList plusList pulls out the first two arguments of a list and adds them

  18. 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

  19. combining reverse and append

  20. 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.

  21. Defining Functions (v.2) Similar to the C-like code: sq2 = int ??(int x) { return x * x; }

  22. 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

  23. 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; }

  24. 7. Recursion • Base case: • the function returns an answer and stops • Recursion step: • the body of the function calls itself (with smaller arguments)

  25. length Defined base case recursive step

  26. append Defined 33

  27. member Defined mem? is a predicate (a test function) mem is the wrong name

  28. 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.

  29. 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)

  30. map • (map f x) • returns a list by applying the function f to each element of the list x

  31. map and plusList plusList is applied to the 4 lists in the input list.

  32. 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

  33. Start DrScheme from the Windows Start menu item PLT Scheme: definitions go here execute functions here

  34. Some Notes • Set the language mode to “Beginning Student with List Abbreviations” • under the Language > Choose Language menu item continued

  35. Press the "Run" button after adding a new function to the definitions window • this makes the new function visible down in the execution window

  36. Create a Scheme Program using any text editor

  37. Load myMax.scm use the File/Open menu item Press the "Run" button for the execution window to appear at thebottom.

  38. Use the myMax Function

  39. 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

  40. 10. More Information • The "Help/ Help Desk" menu item:

  41. 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.

More Related