30
Racket Introduction CSC270 Pepper major portions credited to http://learnxinyminutes.com/docs/racke

Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Embed Size (px)

Citation preview

Page 1: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Racket Introduction

CSC270 Pepper

major portions credited to http://learnxinyminutes.com/docs/racket/

Page 2: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 3: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Declarative vs ImperativeDeclarative•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

Page 4: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 5: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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.

Page 6: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Declarative types

• Logic: – Prolog– Relationships defined in terms of inference rules

• Functional:– Haskell, Excel, Subset of Racket– Relationships defined in terms of functions

Page 7: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 8: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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– http://aruljohn.com/info/x11forwarding/– drracket

• See a racket window good• See Gtk initialization failed for display – no x windows

• Download on PC or Mac– http://download.racket-lang.org/

• IDE – choice : advanced language– Context sensitive F1 help

Page 9: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 10: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 11: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 12: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Comments

• Block comments: #| … |# • Single comments: ;

#lang racket ; define a function called sayhi(define (sayhi ) "Hello from the function"); and now call it(sayhi)

Page 13: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Rules about literals

• String: " " (use \" to type a text quote)• number: 1, 1.3, 1/2, 1+2i, 6.003e+15, #x1A,

#b10111, #o737, 8888888888888888888– 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

Page 14: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 15: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 16: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Pictures• Variable can contain a picture(require picturing-programs)

(define dog1 )

(define cat1 )

( above dog1 cat1)(above (flip-vertical dog1) (above dog1 cat1))

Page 17: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 18: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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 3rd power(remainder 11 3) ;

Page 19: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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"

Page 20: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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%

Page 21: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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<, > , <=, >=,

Page 22: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 23: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 24: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

Dice Roll

(define (roll ) ( + (+ (random 6 ) 1) (+ (random 6 ) 1) ))(roll)(roll)(roll)

Page 25: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 26: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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

Page 27: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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)

Page 28: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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 ])

Page 29: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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) ])

Page 30: Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket

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