Presentation is loading. Please wait.

Presentation is loading. Please wait.

Racket Introduction CSC270 Pepper major portions credited to

Similar presentations


Presentation on theme: "Racket Introduction CSC270 Pepper major portions credited to"— Presentation transcript:

1 Racket Introduction CSC270 Pepper major portions credited to

2 What is Dr. Racket? Racket – Full spectrum programming language with roots in functional programming which is a type of the declarative paradigm Lisp / Scheme Formerly called PLT Scheme Objects, types, laziness, macros, new syntax builder Dr. Racket – Integrated Development Environment

3 Declarative vs Imperative Declarative What not how Language can figure out how when you tell it what No side effects – No mutatable variables Express data flow Imperative Commands manipulate state of system and variables. Many side effects Mutable variables Control flow

4 Contrast: Imperative Types Pure Imperative – SQL DML (insert, update, delete) Procedural – Exactly how algorithms – First do this and next do that – C Object Oriented – Manipulate objects through predefined methods – Classes – Send messages between objects – C++, Java

5 Another Functional Language: Excel Formulas express data flow Command sequence is not a consideration when coding Excel formulas Cells hold one target value – changing inputs will change the value, but you never do anything with its value over time.

6 Declarative types Logic: – Prolog – Relationships defined in terms of inference rules Functional: – Haskell, Excel, Subset of Racket – Relationships defined in terms of functions

7 Racket Strengths Language syntax builder Continuations (capture future value of a computation and pass it around) Dynamic typing Manages its own memory Function creation on the fly (lambda) Function closure

8 How to install Racket Panther will run Racket programs without IDE – racket programfile Panther will run IDE with SSH X Forwarding to allow X Window System GUI – – drracket See a racket window good See Gtk initialization failed for display – no x windows Download on PC or Mac – IDE – choice : advanced language – Context sensitive F1 help

9 Hello Racket Program #lang racket "Hello Racket" Save as hello.rkt – IDE: File / save definition Running the program – IDE : run button – Panther without xterm: racket hello.rkt

10 Hello Racket with a defined variable #lang racket (define hellovar "Hello Racket again") Hellovar Notice that a variable is defined inside parentheses All commands inside parentheses

11 Hello Racket With a Function #lang racket (define (sayhi ) "Hello from the function") (sayhi) Notice how the function call is in () Notice the function definition syntax used here: (define (function name ) (stuff function does)) – Balanced parentheses

12 Comments Block comments: #| … |# Single comments: ; #lang racket ; define a function called sayhi (define (sayhi ) "Hello from the function") ; and now call it (sayhi)

13 Rules about literals String: " " (use \" to type a text quote) number: 1, 1.3, 1/2, 1+2i, 6.003e+15, #x1A, #b10111, #o737, – will store a rational true/false : #t for true, #f for false logical: not, and, or : ex: (not #t) is false and (and 1 2) is false Suppress expansion: just one leading ' : '(function a b) will be text not a function

14 Parentheses Do not put a literal inside ()or Racket will evaluate it as a function #lang racket (define x 3) x (x) ; racket hates this (define (sayhi ) "Hello from the function") (sayhi) sayhi ; racket does not hate this, but wont run the sayhi function

15 Variable use ;Define for the program (define x "outside") ;Define locally (let ([x "inside"]) x) ; displays "inside" x ; displays "outside" ; Define function argument (define (myfunc num) (+ num 3)) ; (myfunc 4) ; displays 7 ; Change a variable (let's avoid it) (set! x 8) x; displays 8

16 Pictures Variable can contain a picture (require picturing-programs) (define dog1 ) (define cat1 ) ( above dog1 cat1) (above (flip-vertical dog1) (above dog1 cat1))

17 Variables Rules Summary definition: (define varname value) – example: (define x 3) use: just use the name; example: x define locally inside a let expression: (let ([varname value]) expression ) – use let * if you want to use the first set of variables to define another set use a variable: just the name - do not put a variable inside () or Racket will evaluate it as a function change a variable – let's avoid it: (set! varname value) example: (set! n (add1 n))

18 Arithmetic: All arithmetic is a function syntax: ( operator operand#1 operand#2) operators: +,-,/,*,expt,quotient, remainder, special operators: exact->inexact (from rational to real), gcd, lcm (+ 1 2) (/ 5 2) ; not integer division! (expt 2 3) ; 2 to the 3 rd power (remainder 11 3) ;

19 Functions Already defined functions with parms Return is value of last expression (define (add8 num) "hello" (+ num 8) "hello again") (add8 3) Resolves to "hello again"

20 Simulate Excel Define 2 cells, one for income and one for deductions Define another cell that represents your gross income (income – deduction) Define another cell that represents your taxes at 30%

21 Booleans #t is true; #f is false = or eq? are functions – Use = for numbers only (= 3 3.0) will be #t (eq? 3 3.0) will be #f (eq? "abc" "abc") will be #t (not (eq? "abc" "def")) will be #t, =,

22 Decision - Cond (cond [ (= 1 x) (add1 x) ] [ (= 2 x) (+ x 4) ] [ else (+ x 6 ) ] ) 2 when x = 1; 6 when x = 2 13 when x = 7

23 Random (random 6) ; gives 0 to 5 (+ (random 6 ) 1 ) gives a dice value Create a throw dice function that rolls 2 dice and returns the total. What are your inputs? What is your output? What is your function name? No need to display the individual dice

24 Dice Roll (define (roll ) ( + (+ (random 6 ) 1) (+ (random 6 ) 1) )) (roll)

25 Repetition - Recursion add from 1 to a max value (define (addnum max) (cond [ ( = max 0) 0 ] [ else ( + max (addnum (- max 1))) ] )) (addnum 5) ; gives 15

26 Recursion Thought Process 1) What is true about the problem? (truth statements will end up in your code) 2) What are the base cases? (small simple truths - adding up 0 numbers yields 0) 3) What are you taking in and what is being returned ? ( give a max and get a total) 4) Make some samples: – Addnum(0) should give 0 – Addnum(1) should give 1 – Addnum(2) should give 3 – Addnum(3) should give 6 – Addnum(4) should give 10

27 Test Cases before coding ;; addnum function adds from 1 to a max argument ;; input max number ;; output total of 1 to argument (define (addnum 0) 0) (require test-engine/racket-tests) (check-expect (addnum 0 ) 0) (check-expect (addnum 1 ) 1) (check-expect (addnum 3 ) 6) (check-expect (addnum 4 ) 10) (check-expect (addnum 10 ) 55) (check-expect (addnum -1 ) 0) (test)

28 Coding the recursion Define the function without a body giving names to input arguments (define (addnum num ) ) Fill in the body with a cond (cond [ ( ) ] [ else ]) Put the base case into the first condition (cond [ ( num <= 0 ) 0 ] [ else ])

29 Coding the Recursive Call Consider how to handle one pass of the repetition; – think about one of the later calls as a sample (addnum 4) Write what is available to you Your input arguments Good return values from your function (see your tests) Define the rest of the information when one part is removed – Call that part recursively (cond [ (<= num 0 ) 0 ] [ else num + addnum(num-1) ])

30 Summary Define Functional Programming Declarative vs Imperative paradigms How to enter literals Create and use variables Create and use functions Decisions Recursive functions Parentheses, Parentheses, Parentheses


Download ppt "Racket Introduction CSC270 Pepper major portions credited to"

Similar presentations


Ads by Google