Download presentation
Presentation is loading. Please wait.
Published byCharles Austin Modified over 8 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.