-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter2.rkt
93 lines (91 loc) · 3.93 KB
/
chapter2.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;; Author: Manny Schneck
#lang htdp/bsl
(require 2htdp/image)
(require 2htdp/universe)
(require rackunit)
; Exercise 13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;distance: determines the distance from point (x,y) to the origin
;;Number Number -> Number
;; (define (distance x y)
;; (sqrt (+ (sqr x)
;; (sqr y))))
;; (check-equal? (distance 3 4) 5)
;; (check-equal? (distance 5 12) 13)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;cube-volume: finds the volume for a cube of given side length
;;Number -> Number
;; (define (cube-volume l)
;; (expt l 3))
;; (check-equal? (cube-volume 3) 27)
;; (check-equal? (cube-volume 2) 8)
;; (check-equal? (cube-volume 1) 1)
;;cube-surface: finds the surface-area for a cube of given side length
;;Number -> Number
;; (define (cube-surface l)
;; (* (sqr l) 6))
;; (check-equal? (cube-surface 1) 6)
;; (check-equal? (cube-surface 2) 24)
;; (check-equal? (cube-surface 6) (cube-volume 6))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;string-first: extracts the first 1String from a non-empty string
;;String -> 1String
;; (define (string-first s)
;; (substring s 0 1))
;; (check-equal? (string-first "hi") "h")
;; (check-equal? (string-first "nope") "n")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; string-last: extracts the last 1String from a non-empty string
;; String -> 1String
;; (define (string-last s)
;; (substring s (sub1 (string-length s))))
;; (check-equal? (string-last "hi") "i")
;; (check-equal? (string-last "nope") "e")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 17
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; bool-imply: implements the logic of boolean implication
;; Boolean Boolean -> Boolean
;; (define (bool-imply sunny friday)
;; (or (not sunny) friday))
;; (check-equal? (bool-imply #t #t) #t)
;; (check-equal? (bool-imply #t #f) #f)
;; (check-equal? (bool-imply #f #t) #t)
;; (check-equal? (bool-imply #f #f) #t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 18
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; image-area: finds the area of an image's Racket bounding box
;; image -> Number
;; (define (image-area i)
;; (* (image-height i)
;; (image-width i)))
;; (check-equal? (image-area (rectangle 20 20 'solid 'black)) 400)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 19
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; image-classify: produces "tall" if an images is taller than wide, else "wide"
;; image -> String
;; (define (image-classify i)
;; (cond [(> (image-height i) (image-width i)) "tall"]
;; [(< (image-height i) (image-width i)) "wide"]
;; [else "square"]))
;; (check-equal? (image-classify (rectangle 100 10 'solid 'black)) "wide")
;; (check-equal? (image-classify (rectangle 10 100 'solid 'black)) "tall")
;; (check-equal? (image-classify (rectangle 10 10 'solid 'black)) "square")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Exercise 20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; string-join: joins two strings with "_" in between
;; string_join: String String -> String
(define (string-join s1 s2)
(string-append s1 "_" s2))
(check-equal? (string-join "hi" "mom") "hi_mom")
(check-equal? (string-join "hello" "world") "hello_world")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;