Essentials
Sites | main download docs git |
Community | packages users@ dev@ irc slack twitter |
Put #lang racket "Hello, world!" in hello.rkt and run racket hello.rkt |
Primitives
Numbers
integer 1 rational 1/2 complex 1+2ifloating 3.14 double 6.02e+23 hex #x29 octal #o32 binary #b010101 | |
Arithmetic | + - * / quotient remaindermodulo add1 sub1 max min roundfloor ceiling sqrt expt exp logsin ... atan |
Compare | |
Bitwise | bitwise-ior bitwise-andbitwise-xor bitwise-notarithmetic-shift integer-length |
Format | number->string string->numberreal->decimal-string |
Test | number? complex? ... exact-nonnegative-integer? ... zero?positive? negative? even? odd?exact? inexact? |
Misc | random |
Match Pattern | (? number? n) 42 |
Strings
"Racket" quoting "a \" approaches!"unicode "λx:(μα.α→α).xx" | |
Create | make-string string string-appendbuild-string string-join |
Observe | string-length string-refsubstring string-split in-string |
Modify | |
Test | |
Regexp | #rx"a|b" #rx"^c(a|d)+r$" regexp-quote regexp-match regexp-splitregexp-replace regexp-replace* |
Match Pattern | (? string? s) "Banana?" |
Bytes
#"rawbytes\0" | |
Create | make-bytes bytes |
Numbers | |
Observe | |
Modify | |
Conversion | |
Test | |
Match Pattern | (? bytes? b) #"0xDEADBEEF" |
Other
Booleans | |
#\a #\tab #\λ char? char->integer integer->char char<=?... char-alphabetic? ... | |
'Racket symbol? eq? string->symbol gensym | |
Boxes | box? box unbox set-box! box-cas! |
Procedures | procedure? apply composecompose1 keyword-applyprocedure-rename procedure-arity curry arity-includes? |
Void | |
Undefined |
Data
Lists
Create | empty list list* build-listfor/list |
Observe | empty? list? pair? length list-ref member count argmin argmax |
Use | append reverse map andmap ormapfoldr in-list |
Modify | filter remove ... sort take dropsplit-at partition remove-duplicates shuffle |
Match Pattern | (list a b c) (list* a b more)(list top more ...) |
Immutable Hash
Create | |
Observe | hash? hash-ref hash-has-key?hash-count in-hash in-hash-keysin-hash-values |
Modify |
Vector
Create | |
Observe | |
Modify | vector-set! vector-fill! vector-copy! vector-map! |
Match Pattern |
Streams
Create | stream stream* empty-stream |
Observe | stream-empty? stream-firststream-rest in-stream |
Mutable Hash
Create | |
Observe | hash? hash-ref hash-has-key?hash-count in-hash in-hash-keysin-hash-values |
Modify | hash-set! hash-ref! hash-update!hash-remove! |
Systems
Input/Output
Formatting | |
Input | read read-bytes peek-byte |
Output | write write-bytes displaydisplayln pretty-print |
Ports and Files | with-input-from-file with-output-to-file flush-outputfile-position make-pipe with-output-to-string with-input-from-string port->bytes port->lines ... |
Files
Miscellaneous
Time | current-seconds current-inexact-milliseconds date->string date-display-format |
Command-Line Parsing | |
FFI |
Networking
TCP | |
HTTP | http-conn http-conn-open! http-conn-send! http-conn-recv!http-conn-sendrecv! http-sendrecv |
URLs | |
JSON | |
XML | |
Databases | postgresql-connect mysql-connect sqlite3-connect query-exec query-rows prepare start-transaction ... |
Security
Custodians | make-custodian custodian-shutdown-all current-custodian |
Sandboxes |
Concurrency
Threads | thread kill-thread thread-waitmake-thread-group |
Events | sync choice-evt wrap-evthandle-evt alarm-evt ... |
Channels | |
Semaphores | |
Async Channels | make-async-channel async-channel-get async-channel-put |
Parallelism
Futures | future touch processor-countmake-fsemaphore ... |
Places | dynamic-place place place-waitplace-wait place-channel ... |
Processes |
Syntax (Beginner)
Basics
Modules | (module+ main body ...) (module+ test body ...) |
S-expressions | quote '(a b c) quasiquoteunquote `(1 2 ,(+ 1 2)) |
Procedure Applications | (fn arg1 arg2) keyword args (fn arg1 #:keyarg2) |
Procedures | (lambda (x) x) (λ (x) x) (λ (x [opt 1]) (+ x opt)) |
Binding | |
Conditionals | (if (zero? x) 0 (/ 1 x)) (cond [(even? x) 0] [(odd? x)1] [else "impossible!"]) |
Definitions | (define x 1) |
Iteration | for for/list for* |
Blocks | |
Require Sub-forms | prefix-in only-in except-inrename-in for-syntax for-label ... |
Provide Sub-forms | all-defined-out all-from-outrename-out ... contract-out |
Structures
Definition | (struct dillo (weight color)) |
Create | (define danny (dillo 17.5'purple)) |
Observe | (dillo? danny) (dillo-weightdanny) (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 ...) (vectorlvp ...) (struct-id pat ...)(regexp rx-expr pat) (or pat...) (and pat ...) (? expr pat...) |
Syntax (Intermediate)
Basics
Mutation | set! |
Exceptions | error with-handlers raiseexit |
Promises | promise? delay force |
Continuations | let/cc let/ec dynamic-windcall-with-continuation-prompt abort-current-continuation call-with-composable-continuation |
Parameters | |
External Files Needed at Runtime | |
Continuation Marks | continuation-marks with-continuation-markcontinuation-mark-set->list |
Multiple Values | values let-values define-values call-with-values |
Contracts
Basics | any/c or/c and/c false/cinteger-in vector/c listoflist/c ... |
Functions | |
Application | contract-out recontract-outwith-contract define/contract |
Iteration
Sequences | in-range in-naturals in-listin-vector in-port in-lines in-hash in-hash-keys in-hash-values in-directory in-cyclestop-before stop-after in-stream |
Generators | generator yield in-generator |
Structures
Sub-structures | (struct 2d (x y)) (struct 3d2d (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 pmode) (fprintf p (nickname-nnn)))]) (displayln (nickname"evens" (in-range 0 100 2))) |
Serialization | (struct txn (who what where)#:prefab) (write (txn"Mustard" "Spatula""Observatory")) |
Generics
Definition | |
Instantiation | (struct even-set () #:methodsgen:set [(define (set-member?st i) (even? i))]) |
Classes
Definition | interface class* |
Instantiation | make-object new instantiate |
Methods | send send/apply send/keyword-apply send* send+ |
Fields | |
Mixins | mixin |
Traits | trait trait-sum trait-excludetrait-rename ... |
Contracts | class/c instanceof/c is-a?/cimplementation?/c subclass?/c |
Syntactic Abstractions
Definition | define-syntax define-simple-macro begin-for-syntax for-syntax |
Templates | |
Parsing ()-Syntax | |
Syntax Objects | syntax-source syntax-line ...syntax->datum datum->syntaxgenerate-temporaries format-id |
Transformers | make-set!-transformer make-rename-transformer local-expand syntax-local-valuesyntax-local-name syntax-local-lift-expression ... |
Syntax Parameters | define-syntax-parametersyntax-parameterize syntax-parameter-value |
Parsing Raw Syntax | lexer parser cfg-parser |
Tools
Packages
Inspection | raco pkg show |
Finding | |
Installing | raco pkg install |
Updating | raco pkg update |
Removing | raco pkg remove |
Miscellaneous
raco make program.rkt | |
raco test program.rkt a-directory | |
raco exe program.rkt | |
Extending DrRacket | drracket:language:simple-module-based-language->module-based-language-mixin |
Slides | slide standard-fish code |
================= End