Racket Introduction CSC270 Pepper major portions credited to //learnxinyminutes.com/docs/racket
-
Upload
misael-bugbee -
Category
Documents
-
view
240 -
download
8
Transcript of 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/
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
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
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
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.
Declarative types
• Logic: – Prolog– Relationships defined in terms of inference rules
• Functional:– Haskell, Excel, Subset of Racket– Relationships defined in terms of functions
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
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
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
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
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
Comments
• Block comments: #| … |# • Single comments: ;
#lang racket ; define a function called sayhi(define (sayhi ) "Hello from the function"); and now call it(sayhi)
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
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
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
Pictures• Variable can contain a picture(require picturing-programs)
(define dog1 )
(define cat1 )
( above dog1 cat1)(above (flip-vertical dog1) (above dog1 cat1))
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))
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) ;
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"
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%
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<, > , <=, >=,
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
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
Dice Roll
(define (roll ) ( + (+ (random 6 ) 1) (+ (random 6 ) 1) ))(roll)(roll)(roll)
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
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
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)
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 ])
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) ])
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