Presentation is loading. Please wait.

Presentation is loading. Please wait.

Computer Eng. Software Lab II 242-203, Semester 2, 2015-2016 Who I am: Andrew Davison CoE, WiG Lab Office Functional Programming.

Similar presentations


Presentation on theme: "Computer Eng. Software Lab II 242-203, Semester 2, 2015-2016 Who I am: Andrew Davison CoE, WiG Lab Office Functional Programming."— Presentation transcript:

1 Computer Eng. Software Lab II 242-203, Semester 2, 2015-2016 Who I am: Andrew Davison CoE, WiG Lab Office ad@fivedots.coe.psu.ac.th Functional Programming with Racket Please ask questions 1FP with Racket

2 Overview 1.Why Racket? 2.Constants (names) 2.Functions 3.Lists 4.cond 5.Recursion 6.No-name Functions: lambda 8. Higher Order Functions 9. Using DrRacket 10. More Information FP with Racket2 continued

3 1. Why Racket? Racket is one of the simpler functional programming languages – a program is a collection of (math) functions – closeness to maths makes programming easier Racket 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 Used in Artficial Intelligence (AI) 3FP with Racket

4 2. Constants (names) myPi is evaluated then printed 'myPi is not evaluated More details on how to use DrRacket are given in Section 9. myPi is defined here 'pi is pre-defined 4FP with Racket

5 First Error FP with Racket5

6 3. Functions A function call is written as: (operator arg 1 arg 2 … arg n ) For example: (+ 2 3)means2 + 3 6FP with Racket

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

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

9 Defining Functions Similar C code is: int sq(int x) { return x*x; } 9FP with Racket

10 Similar C code is: int myMax(int x,int y) { if (x > y) return x; else return y; } 10FP with Racket

11 Combining Functions Racket functions can be easily combined – make a function call the argument of another function function call arguments 11FP with Racket

12 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) 12FP with Racket

13 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 13FP with Racket

14 (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 14FP with Racket

15 List Operation Examples 15FP with Racket

16 plusList plusList pulls out the first two arguments of a list and adds them 16FP with Racket

17 Another Error FP with Racket17

18 Other Built-in 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 18FP with Racket

19 combining reverse and append 19FP with Racket

20 5. 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; } 20FP with Racket

21 6. Recursion Base case: – the function returns an answer and stops Recursion step: – the body of the function calls itself (with smaller arguments) 21FP with Racket

22 length Defined recursive step base case 22FP with Racket

23 33 append Defined 23FP with Racket

24 member Defined mem? is a predicate (a test function) mem is the wrong name 24FP with Racket

25 7. No-name Functions: lambda Similar to the C-like code: int ??(int x) { return x *x; } Similar to a C-like function call: ??(3) The language 'level' must be increased for lambda to be supported. 25FP with Racket

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

27 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 27FP with Racket

28 8. Higher Order Functions 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. An ‘Intermediate Student’ feature 28FP with Racket

29 apply (apply f x) – same as executing (f x) – its first argument, f, is a function name – its second argument, x, is the input for f 29FP with Racket

30 30FP with Racket

31 map (map f x) – returns a list by applying the function f to each element of the list x 31FP with Racket

32 map and plusList plusList is applied to the 4 lists in the input list. 32FP with Racket

33 9. Using DrRacket Download the installation program for DrRacket from: http://fivedots.coe.psu.ac.th/ Software.coe/LAB/FuncProg/ The filename: racket-6.3-i386-win32.exe Installs on Windows 33FP with Racket

34 Start DrRacket from the Windows Start menu item Racket: definitions go here execute functions here 34FP with Racket

35 Some Notes Set the language mode to “Beginning Student with List Abbreviations” – under the Language > Choose Language menu item continued 35FP with Racket

36 Press the "Run" button after adding a new function to the definitions window – this makes the new function visible down in the execution window 36FP with Racket

37 Create a Racket Program using any text editor 37FP with Racket Don't forget this line.

38 Load myMax.scm use the File/Open menu item; or double click on the file 38FP with Racket Press the "Run" button for the execution window to be updated at the bottom. Press the "Run" button for the execution window to be updated at the bottom.

39 Use the myMax Function 39FP with Racket

40 Alternatively, you can type the function into DrRacket's definition window, and save it from there. – you get colour-coded syntax, indenting (tabbing), and error checking as you type 40FP with Racket

41 10. More Information 41FP with Racket The "Help/ Racket Documentation" menu item: Very nice

42 PLT Scheme  Racket PLT Scheme v.5 was renamed to 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. 42FP with Racket


Download ppt "Computer Eng. Software Lab II 242-203, Semester 2, 2015-2016 Who I am: Andrew Davison CoE, WiG Lab Office Functional Programming."

Similar presentations


Ads by Google