2 Beginning Student with List Abbreviations
program | = | def-or-expr ... | ||
def-or-expr | = | definition | ||
| | expr | |||
| | test-case | |||
| | library-require | |||
definition | = | (define (name variable variable ...) expr) | ||
| | (define name expr) | |||
| | (define name (lambda (variable variable ...) expr)) | |||
| | (define-struct name (name ...)) | |||
expr | = | (name expr expr ...) | ||
| | (prim-op expr ...) | |||
| | (cond [expr expr] ... [expr expr]) | |||
| | (cond [expr expr] ... [else expr]) | |||
| | (if expr expr expr) | |||
| | (and expr expr expr ...) | |||
| | (or expr expr expr ...) | |||
| | name | |||
| | ’quoted | |||
| | ‘quasiquoted | |||
| | ’() | |||
| | number | |||
| | boolean | |||
| | string | |||
| | character | |||
quoted | = | name | ||
| | number | |||
| | string | |||
| | character | |||
| | (quoted ...) | |||
| | ’quoted | |||
| | ‘quoted | |||
| | ,quoted | |||
| | ,@quoted | |||
quasiquoted | = | name | ||
| | number | |||
| | string | |||
| | character | |||
| | (quasiquoted ...) | |||
| | ’quasiquoted | |||
| | ‘quasiquoted | |||
| | ,expr | |||
| | ,@expr | |||
test-case | = | (check-expect expr expr) | ||
| | (check-random expr expr) | |||
| | (check-satisfied expr name) | |||
| | (check-within expr expr expr) | |||
| | (check-member-of expr expr ...) | |||
| | (check-range expr expr expr) | |||
| | (check-error expr expr) | |||
| | (check-error expr) | |||
library-require | = | (require string) | ||
| | (require (lib string string ...)) | |||
| | (require (planet string package)) | |||
package | = | (string string number number) |
2.1 Pre-defined Variables
2.2 Template Variables
syntax
syntax
syntax
syntax
syntax
2.3 Syntaxes for Beginning Student with List Abbreviations
syntax
‘name
syntax
‘part
syntax
(quasiquote name)
syntax
(quasiquote part)
syntax
,expression
syntax
(unquote expression)
Under multiple quasiquotes, ,expression is really the literal ,expression, decrementing the quasiquote count by one for expression.
syntax
,@expression
syntax
(unquote-splicing expression)
Under multiple quasiquotes, a splicing unquote is like an unquote; that is, it decrements the quasiquote count by one.
Normally, a splicing unquote is written with ,, but it can also be written with unquote-splicing.
2.4 Common Syntaxes
The following syntaxes behave the same in the Beginner with List Abbreviations level as they did in the Beginning Student level.
syntax
(define (name variable variable ...) expression)
syntax
(define name expression)
A lambda cannot be used outside of this alternate syntax.
syntax
(define-struct structure-name (field-name ...))
make-structure-name : takes a number of arguments equal to the number of fields in the structure, and creates a new instance of that structure.
structure-name-field-name : takes an instance of the structure and returns the value in the field named by field-name.
structure-name? : takes any value, and returns #true if the value is an instance of the structure.
The name of the new functions introduced by define-struct must not be the same as that of other functions or variables, otherwise define-struct reports an error.
syntax
(name expression expression ...)
syntax
(cond [question-expression answer-expression] ...)
(cond [question-expression answer-expression] ... [else answer-expression])
If none of the question-expressions evaluates to #true, cond’s value is the answer-expression of the else clause. If there is no else, cond reports an error. If the result of a question-expression is neither #true nor #false, cond also reports an error.
syntax
(if test-expression then-expression else-expression)
syntax
(and expression expression expression ...)
syntax
(or expression expression expression ...)
syntax
(check-expect expression expected-expression)
(check-expect (fahrenheit->celsius 212) 100) (check-expect (fahrenheit->celsius -40) -40) (define (fahrenheit->celsius f) (* 5/9 (- f 32)))
syntax
(check-random expression expected-expression)
The form supplies the same random-number generator to both parts. If both parts request random numbers from the same interval in the same order, they receive the same random numbers.
(define WIDTH 100) (define HEIGHT (* 2 WIDTH)) (define-struct player (name x y)) ; A Player is (make-player String Nat Nat) ; String -> Player (check-random (create-randomly-placed-player "David Van Horn") (make-player "David Van Horn" (random WIDTH) (random HEIGHT))) (define (create-randomly-placed-player name) (make-player name (random WIDTH) (random HEIGHT)))
; String -> Player (check-random (create-randomly-placed-player "David Van Horn") (make-player "David Van Horn" (random WIDTH) (random HEIGHT))) (define (create-randomly-placed-player name) (local ((define h (random HEIGHT)) (define w (random WIDTH))) (make-player name w h)))
syntax
(check-satisfied expression predicate)
> (check-satisfied 1 odd?) The only test passed!
> (check-satisfied 1 even?)
Ran 1 check.
0 checks passed.
Actual value 1 does not satisfy "even?".
At line 3 column 0
; [cons Number [List-of Number]] -> Boolean ; a function for testing htdp-sort (check-expect (sorted? (list 1 2 3)) #true) (check-expect (sorted? (list 2 1 3)) #false) (define (sorted? l) (cond [(empty? (rest l)) #true] [else (and (<= (first l) (second l)) (sorted? (rest l)))])) ; [List-of Number] -> [List-of Number] ; create a sorted version of the given list of numbers (check-satisfied (htdp-sort (list 1 2 0 3)) sorted?) (define (htdp-sort l) (cond [(empty? l) l] [else (insert (first l) (htdp-sort (rest l)))])) ; Number [List-of Number] -> [List-of Number] ; insert x into l at proper place ; assume l is arranged in ascending order ; the result is sorted in the same way (define (insert x l) (cond [(empty? l) (list x)] [else (if (<= x (first l)) (cons x l) (cons (first l) (insert x (rest l))))]))
> (check-satisfied (htdp-sort (list 1 2 0 3)) sorted?)
syntax
(check-within expression expected-expression delta)
(define-struct roots (x sqrt)) ; RT is [List-of (make-roots Number Number)] (define (roots-table xs) (map (lambda (a) (make-roots a (sqrt a))) xs))
Example: | ||||||||||
|
Example: | ||||||||||||
|
It is an error for expressions or expected-expression to produce a function value; see note on check-expect for details.
syntax
(check-error expression expected-error-message)
(check-error expression)
(define sample-table '(("matthias" 10) ("matthew" 20) ("robby" -1) ("shriram" 18))) ; [List-of [list String Number]] String -> Number ; determine the number associated with s in table (define (lookup table s) (cond [(empty? table) (error (string-append s " not found"))] [else (if (string=? (first (first table)) s) (second (first table)) (lookup (rest table)))]))
Consider the following two examples in this context:
Example: | ||||
|
Example: | ||||
|
syntax
(check-member-of expression expression expression ...)
; [List-of X] -> X ; pick a random element from the given list l (define (pick-one l) (list-ref l (random (length l))))
Example: | ||||
|
syntax
(check-range expression low-expression high-expression)
; [Real -> Real] Real -> Real ; what is the slope of f at x? (define (differentiate f x) (local ((define epsilon 0.001) (define left (- x epsilon)) (define right (+ x epsilon)) (define slope (/ (- (f right) (f left)) 2 epsilon))) slope)) (check-range (differentiate sin 0) 0.99 1.0)
syntax
(require string)
syntax
(require module-name)
syntax
(require (lib string string ...))
syntax
(require (planet string (string string number number)))
syntax
(require (planet id))
syntax
(require (planet string))
The full grammar for planet requires is given in Importing and Exporting: require and provide, but the best place to find examples of the syntax is on the the PLaneT server, in the description of a specific package.
2.5 Pre-defined Functions
The remaining subsections list those functions that are built into the programming language. All other functions are imported from a teachpack or must be defined in the program.
2.6 Numbers: Integers, Rationals, Reals, Complex, Exacts, Inexacts
procedure
(* x y z ...) → number
x : number y : number z : number
> (* 5 3) 15
> (* 5 3 2) 30
procedure
(+ x y z ...) → number
x : number y : number z : number
> (+ 2/3 1/16) 35/48
> (+ 3 2 5 8) 18
procedure
(- x y ...) → number
x : number y : number
> (- 5) -5
> (- 5 3) 2
> (- 5 3 1) 1
procedure
(/ x y z ...) → number
x : number y : number z : number
> (/ 12 2) 6
> (/ 12 2 3) 2
procedure
(< x y z ...) → boolean?
x : real y : real z : real
> (< 42 2/5) #f
procedure
(<= x y z ...) → boolean?
x : real y : real z : real
> (<= 42 2/5) #f
procedure
(= x y z ...) → boolean?
x : number y : number z : number
> (= 42 2/5) #f
procedure
(> x y z ...) → boolean?
x : real y : real z : real
> (> 42 2/5) #t
procedure
(>= x y z ...) → boolean?
x : real y : real z : real
> (>= 42 42) #t
procedure
(abs x) → real
x : real
> (abs -12) 12
procedure
(acos x) → number
x : number
> (acos 0) 1.5707963267948966
procedure
(add1 x) → number
x : number
> (add1 2) 3
procedure
(angle x) → real
x : number
> (angle (make-polar 3 4)) -2.2831853071795867
procedure
(asin x) → number
x : number
> (asin 0) 0
procedure
(atan x) → number
x : number
> (atan 0) 0
> (atan 0.5) 0.46364760900080615
> (atan 3 4) 0.6435011087932844
> (atan -2 -1) -2.0344439357957027
procedure
(ceiling x) → integer
x : real
> (ceiling 12.3) 13.0
procedure
(complex? x) → boolean?
x : any/c
> (complex? 1-2i) #t
procedure
(conjugate x) → number
x : number
> (conjugate 3+4i) 3-4i
> (conjugate -2-5i) -2+5i
> (conjugate (make-polar 3 4)) -1.960930862590836+2.2704074859237844i
procedure
(cos x) → number
x : number
> (cos pi) -1.0
procedure
(cosh x) → number
x : number
> (cosh 10) 11013.232920103324
procedure
(current-seconds) → integer
> (current-seconds) 1444152839
procedure
(denominator x) → integer
x : rational?
> (denominator 2/3) 3
value
e : real
> e 2.718281828459045
procedure
(even? x) → boolean?
x : integer
> (even? 2) #t
procedure
(exact->inexact x) → number
x : number
> (exact->inexact 12) 12.0
procedure
(exact? x) → boolean?
x : number
> (exact? (sqrt 2)) #f
procedure
(exp x) → number
x : number
> (exp -2) 0.1353352832366127
procedure
(expt x y) → number
x : number y : number
> (expt 16 1/2) 4
> (expt 3 -4) 1/81
procedure
(floor x) → integer
x : real
> (floor 12.3) 12.0
procedure
(gcd x y ...) → integer
x : integer y : integer
> (gcd 6 12 8) 2
procedure
(imag-part x) → real
x : number
> (imag-part 3+4i) 4
procedure
(inexact->exact x) → number
x : number
> (inexact->exact 12.0) 12
procedure
(inexact? x) → boolean?
x : number
> (inexact? 1-2i) #f
procedure
(integer->char x) → char
x : exact-integer?
> (integer->char 42) #\*
procedure
(integer-sqrt x) → complex
x : integer
> (integer-sqrt 11) 3
> (integer-sqrt -11) 0+3i
procedure
(integer? x) → boolean?
x : any/c
> (integer? (sqrt 2)) #f
procedure
(lcm x y ...) → integer
x : integer y : integer
> (lcm 6 12 8) 24
procedure
(log x) → number
x : number
> (log 12) 2.4849066497880004
procedure
(magnitude x) → real
x : number
> (magnitude (make-polar 3 4)) 3.0
procedure
(make-polar x y) → number
x : real y : real
> (make-polar 3 4) -1.960930862590836-2.2704074859237844i
procedure
(make-rectangular x y) → number
x : real y : real
> (make-rectangular 3 4) 3+4i
procedure
(max x y ...) → real
x : real y : real
> (max 3 2 8 7 2 9 0) 9
procedure
(min x y ...) → real
x : real y : real
> (min 3 2 8 7 2 9 0) 0
procedure
(modulo x y) → integer
x : integer y : integer
> (modulo 9 2) 1
> (modulo 3 -4) -1
procedure
(negative? x) → boolean?
x : number
> (negative? -2) #t
procedure
(number->string x) → string
x : number
> (number->string 42) "42"
procedure
(number? n) → boolean?
n : any/c
> (number? "hello world") #f
> (number? 42) #t
procedure
(numerator x) → integer
x : rational?
> (numerator 2/3) 2
procedure
(odd? x) → boolean?
x : integer
> (odd? 2) #f
value
pi : real
> pi 3.141592653589793
procedure
(positive? x) → boolean?
x : number
> (positive? -2) #f
procedure
(quotient x y) → integer
x : integer y : integer
> (quotient 9 2) 4
> (quotient 3 4) 0
procedure
(random x) → natural
x : natural
> (random 42) 23
procedure
(rational? x) → boolean?
x : any/c
> (rational? 1) #t
> (rational? -2.349) #t
> (rational? #i1.23456789) #t
> (rational? (sqrt -1)) #f
> (rational? pi) #t
> (rational? e) #t
> (rational? 1-2i) #f
procedure
(real-part x) → real
x : number
> (real-part 3+4i) 3
procedure
(real? x) → boolean?
x : any/c
> (real? 1-2i) #f
procedure
(remainder x y) → integer
x : integer y : integer
> (remainder 9 2) 1
> (remainder 3 4) 3
procedure
(round x) → integer
x : real
> (round 12.3) 12.0
procedure
(sgn x) → (union 1 #i1.0 0 #i0.0 -1 #i-1.0)
x : real
> (sgn -12) -1
procedure
(sin x) → number
x : number
> (sin pi) 1.2246467991473532e-16
procedure
(sinh x) → number
x : number
> (sinh 10) 11013.232874703393
procedure
(sqr x) → number
x : number
> (sqr 8) 64
procedure
(sqrt x) → number
x : number
> (sqrt 9) 3
> (sqrt 2) 1.4142135623730951
procedure
(sub1 x) → number
x : number
> (sub1 2) 1
procedure
(tan x) → number
x : number
> (tan pi) -1.2246467991473532e-16
procedure
(zero? x) → boolean?
x : number
> (zero? 2) #f
2.7 Booleans
procedure
(boolean=? x y) → boolean?
x : boolean? y : boolean?
> (boolean=? #true #false) #f
procedure
(boolean? x) → boolean?
x : any/c
> (boolean? 42) #f
> (boolean? #false) #t
procedure
(false? x) → boolean?
x : any/c
> (false? #false) #t
procedure
(not x) → boolean?
x : boolean?
> (not #false) #t
2.8 Symbols
procedure
(symbol->string x) → string
x : symbol
> (symbol->string 'c) "c"
procedure
(symbol=? x y) → boolean?
x : symbol y : symbol
> (symbol=? 'a 'b) #f
procedure
(symbol? x) → boolean?
x : any/c
> (symbol? 'a) #t
2.9 Lists
procedure
(append x y z ...) → list?
x : list? y : list? z : list?
> (append (cons 1 (cons 2 '())) (cons "a" (cons "b" empty))) (1 2 "a" "b")
procedure
(assoc x l) → (union (listof any) #false)
x : any l : (listof any)
> (assoc "hello" '(("world" 2) ("hello" 3) ("good" 0))) ("hello" 3)
procedure
(assq x l) → (union #false cons?)
x : any/c l : list?
> a ((a 22) (b 8) (c 70))
> (assq 'b a) (b 8)
procedure
(caaar x) → any/c
x : list?
> w (((("bye") 3) #t) 42)
> (caaar w) ("bye")
procedure
(caadr x) → any/c
x : list?
> (caadr (cons 1 (cons (cons 'a '()) (cons (cons 'd '()) '())))) a
procedure
(caar x) → any/c
x : list?
> y (((1 2 3) #f "world"))
> (caar y) (1 2 3)
procedure
(cadar x) → any/c
x : list?
> w (((("bye") 3) #t) 42)
> (cadar w) #t
procedure
(cadddr x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (cadddr v) 4
procedure
(caddr x) → any/c
x : list?
> x (2 "hello" #t)
> (caddr x) #t
procedure
(cadr x) → any/c
x : list?
> x (2 "hello" #t)
> (cadr x) "hello"
procedure
(car x) → any/c
x : cons?
> x (2 "hello" #t)
> (car x) 2
procedure
(cdaar x) → any/c
x : list?
> w (((("bye") 3) #t) 42)
> (cdaar w) (3)
procedure
(cdadr x) → any/c
x : list?
> z (2 "hello" #t "hello")
> (cdadr z) cdadr: contract violation
expected: (cons/c any/c (cons/c pair? any/c))
given: (2 "hello" #t "hello")
procedure
(cdar x) → list?
x : list?
> y (((1 2 3) #f "world"))
> (cdar y) (#f "world")
procedure
(cddar x) → any/c
x : list?
> w (((("bye") 3) #t) 42)
> (cddar w) ()
procedure
(cdddr x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (cdddr v) (4 5 6 7 8 9 A)
procedure
(cddr x) → list?
x : list?
> x (2 "hello" #t)
> (cddr x) (#t)
procedure
(cdr x) → any/c
x : cons?
> x (2 "hello" #t)
> (cdr x) ("hello" #t)
procedure
(cons x y) → list?
x : any/x y : list?
> (cons 1 '()) (1)
procedure
(cons? x) → boolean?
x : any/c
> (cons? (cons 1 '())) #t
> (cons? 42) #f
procedure
(eighth x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (eighth v) 8
procedure
(empty? x) → boolean?
x : any/c
> (empty? '()) #t
> (empty? 42) #f
procedure
(fifth x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (fifth v) 5
procedure
(first x) → any/c
x : cons?
> x (2 "hello" #t)
> (first x) 2
procedure
(fourth x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (fourth v) 4
procedure
(length l) → natural-number?
l : list?
> x (2 "hello" #t)
> (length x) 3
procedure
(list x ...) → list?
x : any/c
> (list 1 2 3 4 5 6 7 8 9 0) (1 2 3 4 5 6 7 8 9 0)
procedure
(list* x ... l) → list?
x : any/c l : list?
> x (2 "hello" #t)
> (list* 4 3 x) (4 3 2 "hello" #t)
procedure
(list-ref x i) → any/c
x : list? i : natural?
> v (1 2 3 4 5 6 7 8 9 A)
> (list-ref v 9) A
procedure
(make-list i x) → list?
i : natural-number x : any/c
> (make-list 3 "hello") ("hello" "hello" "hello")
procedure
(member x l) → boolean?
x : any/c l : list?
> x (2 "hello" #t)
> (member "hello" x) #t
procedure
(member? x l) → boolean?
x : any/c l : list?
> x (2 "hello" #t)
> (member? "hello" x) #t
procedure
(memq x l) → boolean?
x : any/c l : list?
> x (2 "hello" #t)
> (memq (list (list 1 2 3)) x) #f
procedure
(memq? x l) → boolean?
x : any/c l : list?
> x (2 "hello" #t)
> (memq? (list (list 1 2 3)) x) #f
procedure
(memv x l) → (or/c #false list)
x : any/c l : list?
> x (2 "hello" #t)
> (memv (list (list 1 2 3)) x) #f
value
null : list
> null ()
procedure
(null? x) → boolean?
x : any/c
> (null? '()) #t
> (null? 42) #f
procedure
(range start end step) → list?
start : number end : number step : number
> (range 0 10 2) (0 2 4 6 8)
procedure
(remove x l) → list?
x : any/c l : list?
> x (2 "hello" #t)
> (remove "hello" x) (2 #t)
> z (2 "hello" #t "hello")
> (remove "hello" z) (2 #t "hello")
procedure
(remove-all x l) → list?
x : any/c l : list?
> x (2 "hello" #t)
> (remove-all "hello" x) (2 #t)
> z (2 "hello" #t "hello")
> (remove-all "hello" z) (2 #t)
procedure
(rest x) → any/c
x : cons?
> x (2 "hello" #t)
> (rest x) ("hello" #t)
procedure
(reverse l) → list
l : list?
> x (2 "hello" #t)
> (reverse x) (#t "hello" 2)
procedure
(second x) → any/c
x : list?
> x (2 "hello" #t)
> (second x) "hello"
procedure
(seventh x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (seventh v) 7
procedure
(sixth x) → any/c
x : list?
> v (1 2 3 4 5 6 7 8 9 A)
> (sixth v) 6
procedure
(third x) → any/c
x : list?
> x (2 "hello" #t)
> (third x) #t
2.10 Posns
procedure
(make-posn x y) → posn
x : any/c y : any/c
> (make-posn 3 3) #(struct:posn 3 3)
> (make-posn "hello" #true) #(struct:posn "hello" #t)
procedure
(posn-x p) → any
p : posn
> p #(struct:posn 2 -3)
> (posn-x p) 2
procedure
(posn-y p) → any
p : posn
> p #(struct:posn 2 -3)
> (posn-y p) -3
procedure
(posn? x) → boolean?
x : any/c
> q #(struct:posn "bye" 2)
> (posn? q) #t
> (posn? 42) #f
2.11 Characters
procedure
(char->integer c) → integer
c : char
> (char->integer #\a) 97
> (char->integer #\z) 122
procedure
(char-alphabetic? c) → boolean?
c : char
> (char-alphabetic? #\Q) #t
procedure
(char-ci<=? c d e ...) → boolean?
c : char d : char e : char
> (char-ci<=? #\b #\B) #t
> (char<=? #\b #\B) #f
procedure
(char-ci<? c d e ...) → boolean?
c : char d : char e : char
> (char-ci<? #\B #\c) #t
> (char<? #\b #\B) #f
procedure
(char-ci=? c d e ...) → boolean?
c : char d : char e : char
> (char-ci=? #\b #\B) #t
procedure
(char-ci>=? c d e ...) → boolean?
c : char d : char e : char
> (char-ci>=? #\b #\C) #f
> (char>=? #\b #\C) #t
procedure
(char-ci>? c d e ...) → boolean?
c : char d : char e : char
> (char-ci>? #\b #\B) #f
> (char>? #\b #\B) #t
procedure
(char-downcase c) → char
c : char
> (char-downcase #\T) #\t
procedure
(char-lower-case? c) → boolean?
c : char
> (char-lower-case? #\T) #f
procedure
(char-numeric? c) → boolean?
c : char
> (char-numeric? #\9) #t
procedure
(char-upcase c) → char
c : char
> (char-upcase #\t) #\T
procedure
(char-upper-case? c) → boolean?
c : char
> (char-upper-case? #\T) #t
procedure
(char-whitespace? c) → boolean?
c : char
> (char-whitespace? #\tab) #t
procedure
(char<=? c d e ...) → boolean?
c : char d : char e : char
> (char<=? #\a #\a #\b) #t
procedure
(char<? x d e ...) → boolean?
x : char d : char e : char
> (char<? #\a #\b #\c) #t
procedure
(char=? c d e ...) → boolean?
c : char d : char e : char
> (char=? #\b #\a) #f
procedure
(char>=? c d e ...) → boolean?
c : char d : char e : char
> (char>=? #\b #\b #\a) #t
procedure
(char>? c d e ...) → boolean?
c : char d : char e : char
> (char>? #\A #\z #\a) #f
procedure
(char? x) → boolean?
x : any/c
> (char? "a") #f
> (char? #\a) #t
2.12 Strings
procedure
(explode s) → (listof string)
s : string
> (explode "cat") ("c" "a" "t")
procedure
(format f x ...) → string
f : string x : any/c
> (format "Dear Dr. ~a:" "Flatt") "Dear Dr. Flatt:"
> (format "Dear Dr. ~s:" "Flatt") "Dear Dr. \"Flatt\":"
> (format "the value of ~s is ~a" '(+ 1 1) (+ 1 1)) "the value of (+ 1 1) is 2"
procedure
(implode l) → string
l : list?
> (implode (cons "c" (cons "a" (cons "t" '())))) "cat"
procedure
(int->string i) → string
i : integer
> (int->string 65) "A"
procedure
(list->string l) → string
l : list?
> (list->string (cons #\c (cons #\a (cons #\t '())))) "cat"
procedure
(make-string i c) → string
i : natural-number c : char
> (make-string 3 #\d) "ddd"
procedure
(replicate i s) → string
i : natural-number s : string
> (replicate 3 "h") "hhh"
procedure
(string c ...) → string?
c : char
> (string #\d #\o #\g) "dog"
procedure
(string->int s) → integer
s : string
> (string->int "a") 97
procedure
(string->list s) → (listof char)
s : string
> (string->list "hello") (#\h #\e #\l #\l #\o)
procedure
(string->number s) → (union number #false)
s : string
> (string->number "-2.03") -2.03
> (string->number "1-2i") 1-2i
procedure
(string->symbol s) → symbol
s : string
> (string->symbol "hello") hello
procedure
(string-alphabetic? s) → boolean?
s : string
> (string-alphabetic? "123") #f
> (string-alphabetic? "cat") #t
procedure
(string-append s ...) → string
s : string
> (string-append "hello" " " "world" " " "good bye") "hello world good bye"
procedure
(string-ci<=? s t x ...) → boolean?
s : string t : string x : string
> (string-ci<=? "hello" "WORLD" "zoo") #t
procedure
(string-ci<? s t x ...) → boolean?
s : string t : string x : string
> (string-ci<? "hello" "WORLD" "zoo") #t
procedure
(string-ci=? s t x ...) → boolean?
s : string t : string x : string
> (string-ci=? "hello" "HellO") #t
procedure
(string-ci>=? s t x ...) → boolean?
s : string t : string x : string
> (string-ci>? "zoo" "WORLD" "hello") #t
procedure
(string-ci>? s t x ...) → boolean?
s : string t : string x : string
> (string-ci>? "zoo" "WORLD" "hello") #t
procedure
(string-contains? s t) → boolean?
s : string t : string
> (string-contains? "at" "cat") #t
procedure
(string-copy s) → string
s : string
> (string-copy "hello") "hello"
procedure
(string-ith s i) → 1string?
s : string i : natural-number
> (string-ith "hello world" 1) "e"
procedure
(string-length s) → nat
s : string
> (string-length "hello world") 11
procedure
(string-lower-case? s) → boolean?
s : string
> (string-lower-case? "CAT") #f
procedure
(string-numeric? s) → boolean?
s : string
> (string-numeric? "123") #t
> (string-numeric? "1-2i") #f
procedure
(string-ref s i) → char
s : string i : natural-number
> (string-ref "cat" 2) #\t
procedure
(string-upper-case? s) → boolean?
s : string
> (string-upper-case? "CAT") #t
procedure
(string-whitespace? s) → boolean?
s : string
> (string-whitespace? (string-append " " (string #\tab #\newline #\return))) #t
procedure
(string<=? s t x ...) → boolean?
s : string t : string x : string
> (string<=? "hello" "hello" "world" "zoo") #t
procedure
(string<? s t x ...) → boolean?
s : string t : string x : string
> (string<? "hello" "world" "zoo") #t
procedure
(string=? s t x ...) → boolean?
s : string t : string x : string
> (string=? "hello" "world") #f
> (string=? "bye" "bye") #t
procedure
(string>=? s t x ...) → boolean?
s : string t : string x : string
> (string>=? "zoo" "zoo" "world" "hello") #t
procedure
(string>? s t x ...) → boolean?
s : string t : string x : string
> (string>? "zoo" "world" "hello") #t
procedure
(string? x) → boolean?
x : any/c
> (string? "hello world") #t
> (string? 42) #f
procedure
(substring s i j) → string
s : string i : natural-number j : natural-number
> (substring "hello world" 1 5) "ello"
> (substring "hello world" 4) "o world"
2.13 Images
procedure
(image=? i j) → boolean?
i : image j : image
> c1 > (image=? (circle 5 "solid" "green") c1) #f
> (image=? (circle 10 "solid" "green") c1) #t
procedure
(image? x) → boolean?
x : any/c
> c1 > (image? c1) #t
2.14 Misc
procedure
(=~ x y z) → boolean?
x : number y : number z : non-negative-real
> (=~ 1.01 1.0 0.1) #t
> (=~ 1.01 1.5 0.1) #f
value
eof : eof-object?
> eof #<eof>
procedure
(eof-object? x) → boolean?
x : any/c
> (eof-object? eof) #t
> (eof-object? 42) #f
procedure
(eq? x y) → boolean?
x : any/c y : any/c
> (eq? (cons 1 '()) (cons 1 '())) #f
> one (1)
> (eq? one one) #t
procedure
(equal? x y) → boolean?
x : any/c y : any/c
> (equal? (make-posn 1 2) (make-posn (- 2 1) (+ 1 1))) #t
procedure
(equal~? x y z) → boolean?
x : any/c y : any/c z : non-negative-real
> (equal~? (make-posn 1.01 1.0) (make-posn 1.01 0.99) 0.2) #t
procedure
(eqv? x y) → boolean?
x : any/c y : any/c
> (eqv? (cons 1 '()) (cons 1 '())) #f
> one (1)
> (eqv? one one) #t
procedure
(error x ...) → void?
x : any/c
> zero 0
> (if (= zero 0) (error "can't divide by 0") (/ 1 zero)) can't divide by 0
procedure
(exit) → void
procedure
(identity x) → any
x : any/c
> (identity 42) 42
> (identity c1) > (identity "hello") "hello"
procedure
(struct? x) → boolean?
x : any/c
> (struct? (make-posn 1 2)) #t
> (struct? 43) #f