Racketチートシート
Essentials
Primitives
Data
Systems
Syntax (Beginner)
Syntax (Intermediate)
Syntactic Abstractions
Tools
8.6

Racket Cheat Sheet

Jay McCarthy

Essentials
Sites main download docs git
Community packages users@ dev@ irc slack twitter
Running Put #lang racket "Hello, world!" in hello.rkt and run racket hello.rkt
Primitives

Numbers

Literals integer 1 rational  1/2  complex 1+2i floating 3.14 double 6.02e+23 hex #x29 octal #o32 binary #b010101
Arithmetic + - * / quotient remainder modulo add1 sub1 max min round floor ceiling sqrt expt exp log sin ... atan
Compare = < <= > >=
Bitwise bitwise-ior bitwise-and bitwise-xor bitwise-not arithmetic-shift integer-length
Format number->string string->number real->decimal-string
Test number? complex? ... exact-nonnegative-integer? ... zero? positive? negative? even? odd? exact? inexact?
Misc random
Match Pattern (? number? n) 42

Strings

Literals "Racket" quoting "a \" approaches!" unicode "λx:(μα.α→α).xx"
Create make-string string string-append build-string string-join
Observe string-length string-ref substring string-split in-string
Modify string-downcase string-upcase string-trim
Test string? string=? string<=? string-ci<=?
Regexp #rx"a|b" #rx"^c(a|d)+r$" regexp-quote regexp-match regexp-split regexp-replace regexp-replace*
Match Pattern (? string? s) "Banana?"
Systems
Syntax (Beginner)

Basics

Modules (module+ main body ...)
(module+ test body ...)
(require mod-path) (provide id)
S-expressions quote '(a b c) quasiquote unquote `(1 2 ,(+ 1 2))
Procedure Applications (fn arg1 arg2)
keyword args (fn arg1 #:key arg2)
(apply fn arg1 (list arg2))
Procedures (lambda (x) x) (λ (x) x)
(λ (x [opt 1]) (+ x opt))
(λ (x #:req key) (+ x key))
(λ (x #:opt [key 1]) (+ x key))
Binding (let ([x 1] [y 2]) (+ x y))
(let* ([x 1] [x (+ x 1)]) x)
Conditionals (if (zero? x) 0 (/ 1 x))
(cond [(even? x) 0] [(odd? x) 1]
      [else "impossible!"])
and or
Definitions (define x 1)
(define (f y) (+ x y))
Iteration for for/list for*
Blocks begin when unless
Require Sub-forms prefix-in only-in except-in rename-in for-syntax for-label ...
Provide Sub-forms all-defined-out all-from-out rename-out ... contract-out

Structures

Definition (struct dillo (weight color))
Create (define danny (dillo 17.5 'purple))
Observe (dillo? danny) (dillo-weight danny) (dillo-color danny)
Modify (struct-copy dillo danny ([weight 18.0]))
Match Pattern (dillo w c)

Pattern Matching

Basics (match value [pat body] ...)
Definitions (match-define pat value)
Patterns (quote datum) (list lvp ...) (list-no-order pat ...) (vector lvp ...) (struct-id pat ...) (regexp rx-expr pat) (or pat ...) (and pat ...) (? expr pat ...)
Syntax (Intermediate)

Structures

Sub-structures (struct 2d (x y)) (struct 3d 2d (z)) (2d-x (3d 1 2 3))
Mutation (struct monster (type [hp #:mutable])) (define healie (monster 'slime 10)) (set-monster-hp! healie 0)
Transparency (struct cash ($ ¢) #:transparent) (struct->vector (cash 5 95))
Printing (struct nickname [n v] #:methods gen:custom-write [(define (write-proc nn p mode) (fprintf p (nickname-n nn)))]) (displayln (nickname "evens" (in-range 0 100 2)))
Serialization (struct txn (who what where) #:prefab) (write (txn "Mustard" "Spatula" "Observatory"))

Generics

Definition define-generics
Instantiation (struct even-set () #:methods gen:set [(define (set-member? st i) (even? i))])
Tools

Packages

Inspection raco pkg show
Finding pkgs.racket-lang.org
Installing raco pkg install
Updating raco pkg update
Removing raco pkg remove

Miscellaneous

Compiling raco make program.rkt
Testing raco test program.rkt a-directory
Building Executables raco exe program.rkt
Extending DrRacket drracket:language:simple-module-based-language->module-based-language-mixin
Slides slide standard-fish code