Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-intermediate-reader.ss" "lang")((modname 14.3.1) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;A web-page is either
5 12687dd9 2023-08-04 jrmu ;1. empty or
6 12687dd9 2023-08-04 jrmu ;2. (cons s wp)
7 12687dd9 2023-08-04 jrmu ;3. (cons ewp wp)
8 12687dd9 2023-08-04 jrmu ;where s is a symbol and
9 12687dd9 2023-08-04 jrmu ;ewp, wp are web-pages (WP).
10 12687dd9 2023-08-04 jrmu ;(ewp, embedded web page)
11 12687dd9 2023-08-04 jrmu ;
12 12687dd9 2023-08-04 jrmu ;Template
13 12687dd9 2023-08-04 jrmu ;fun-for-wp : WP -> ???
14 12687dd9 2023-08-04 jrmu ;(define (fun-for-wp a-WP)
15 12687dd9 2023-08-04 jrmu ; (cond
16 12687dd9 2023-08-04 jrmu ; [(empty? a-WP) ...]
17 12687dd9 2023-08-04 jrmu ; [(symbol? (first a-WP)) ... (first a-WP) (fun-for-wp (rest a-WP)) ...]
18 12687dd9 2023-08-04 jrmu ; [else ... (first a-WP) (fun-for-wp (rest a-WP)) ...]))
19 12687dd9 2023-08-04 jrmu ;
20 12687dd9 2023-08-04 jrmu ;size : wp -> number
21 12687dd9 2023-08-04 jrmu ;Determine the size of a wp, that is,
22 12687dd9 2023-08-04 jrmu ;how many symbols are in a-wp.
23 12687dd9 2023-08-04 jrmu
24 12687dd9 2023-08-04 jrmu (define (size a-WP)
25 12687dd9 2023-08-04 jrmu (cond
26 12687dd9 2023-08-04 jrmu [(empty? a-WP) 0]
27 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP)) (+ 1 (size (rest a-WP)))]
28 12687dd9 2023-08-04 jrmu [else (+ (size (first a-WP))
29 12687dd9 2023-08-04 jrmu (size (rest a-WP)))]))
30 12687dd9 2023-08-04 jrmu
31 12687dd9 2023-08-04 jrmu (define MRWP '((h i)
32 12687dd9 2023-08-04 jrmu (m y)
33 12687dd9 2023-08-04 jrmu (n a m e)
34 12687dd9 2023-08-04 jrmu (i s)
35 12687dd9 2023-08-04 jrmu (j o e)))
36 12687dd9 2023-08-04 jrmu
37 12687dd9 2023-08-04 jrmu (define MRSWP '(h i m y n a m e i s
38 12687dd9 2023-08-04 jrmu (s a l l y)
39 12687dd9 2023-08-04 jrmu (r i d e)
40 12687dd9 2023-08-04 jrmu a n d i a m
41 12687dd9 2023-08-04 jrmu (a n)
42 12687dd9 2023-08-04 jrmu (a s t r o)
43 12687dd9 2023-08-04 jrmu n a u t))
44 12687dd9 2023-08-04 jrmu
45 12687dd9 2023-08-04 jrmu ;occurs1 : WP symbol -> number
46 12687dd9 2023-08-04 jrmu ;Given a-WP and a-symbol, determines
47 12687dd9 2023-08-04 jrmu ;the number of occurrences of a-symbol
48 12687dd9 2023-08-04 jrmu ;in a-WP ignoring embedded webpages
49 12687dd9 2023-08-04 jrmu ;(that is, do not search ewp for
50 12687dd9 2023-08-04 jrmu ;webpages of the form (cons ewp wp)).
51 12687dd9 2023-08-04 jrmu
52 12687dd9 2023-08-04 jrmu ;occurs1 : WP symbol -> number
53 12687dd9 2023-08-04 jrmu ;(define (occurs1 a-WP a-symbol)
54 12687dd9 2023-08-04 jrmu ; (cond
55 12687dd9 2023-08-04 jrmu ; [(empty? a-WP) 0]
56 12687dd9 2023-08-04 jrmu ; [(symbol? (first a-WP))
57 12687dd9 2023-08-04 jrmu ; (cond
58 12687dd9 2023-08-04 jrmu ; [(symbol=? (first a-WP) a-symbol) (+ 1 (occurs1 (rest a-WP) a-symbol))]
59 12687dd9 2023-08-04 jrmu ; [else (occurs1 (rest a-WP) a-symbol)])]
60 12687dd9 2023-08-04 jrmu ; [else (occurs1 (rest a-WP) a-symbol)]))
61 12687dd9 2023-08-04 jrmu
62 12687dd9 2023-08-04 jrmu (define (occurs1 a-WP a-symbol)
63 12687dd9 2023-08-04 jrmu (cond
64 12687dd9 2023-08-04 jrmu [(empty? a-WP) 0]
65 12687dd9 2023-08-04 jrmu [(and (symbol? (first a-WP))
66 12687dd9 2023-08-04 jrmu (symbol=? (first a-WP) a-symbol)) (+ 1 (occurs1 (rest a-WP) a-symbol))]
67 12687dd9 2023-08-04 jrmu [else (occurs1 (rest a-WP) a-symbol)]))
68 12687dd9 2023-08-04 jrmu
69 12687dd9 2023-08-04 jrmu ;occurs2 : WP symbol -> number
70 12687dd9 2023-08-04 jrmu ;Determines the number of times
71 12687dd9 2023-08-04 jrmu ;a-symbol occurs in a-WP, counting
72 12687dd9 2023-08-04 jrmu ;embedded web pages (ewp).
73 12687dd9 2023-08-04 jrmu
74 12687dd9 2023-08-04 jrmu (define (occurs2 a-WP a-symbol)
75 12687dd9 2023-08-04 jrmu (cond
76 12687dd9 2023-08-04 jrmu [(empty? a-WP) 0]
77 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP))
78 12687dd9 2023-08-04 jrmu (cond
79 12687dd9 2023-08-04 jrmu [(symbol=? (first a-WP) a-symbol) (+ 1 (occurs2 (rest a-WP) a-symbol))]
80 12687dd9 2023-08-04 jrmu [else (occurs2 (rest a-WP) a-symbol)])]
81 12687dd9 2023-08-04 jrmu [else (+ (occurs2 (first a-WP) a-symbol)
82 12687dd9 2023-08-04 jrmu (occurs2 (rest a-WP) a-symbol))]))
83 12687dd9 2023-08-04 jrmu ;
84 12687dd9 2023-08-04 jrmu ;replace : symbol symbol WP -> WP
85 12687dd9 2023-08-04 jrmu ;Replace old with new in a-WP and return
86 12687dd9 2023-08-04 jrmu ;the new WP.
87 12687dd9 2023-08-04 jrmu
88 12687dd9 2023-08-04 jrmu (define (replace new old a-WP)
89 12687dd9 2023-08-04 jrmu (cond
90 12687dd9 2023-08-04 jrmu [(empty? a-WP) empty]
91 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP))
92 12687dd9 2023-08-04 jrmu (cond
93 12687dd9 2023-08-04 jrmu [(symbol=? (first a-WP) old) (cons new
94 12687dd9 2023-08-04 jrmu (replace new old (rest a-WP)))]
95 12687dd9 2023-08-04 jrmu [else (cons (first a-WP)
96 12687dd9 2023-08-04 jrmu (replace new old (rest a-WP)))])]
97 12687dd9 2023-08-04 jrmu [else (cons (replace new old (first a-WP))
98 12687dd9 2023-08-04 jrmu (replace new old (rest a-WP)))]))
99 12687dd9 2023-08-04 jrmu
100 12687dd9 2023-08-04 jrmu ;depth : WP -> number
101 12687dd9 2023-08-04 jrmu ;Calculates the depth of a-WP, which
102 12687dd9 2023-08-04 jrmu ;is the number of immediately embedded web pages.
103 12687dd9 2023-08-04 jrmu ;If there are several immediately embedded webpages,
104 12687dd9 2023-08-04 jrmu ;we return the maximum of the depths of
105 12687dd9 2023-08-04 jrmu ;the embedded webpages plus 1 to account for the
106 12687dd9 2023-08-04 jrmu ;embedding of the first webpage.
107 12687dd9 2023-08-04 jrmu
108 12687dd9 2023-08-04 jrmu (define (depth a-WP)
109 12687dd9 2023-08-04 jrmu (cond
110 12687dd9 2023-08-04 jrmu [(empty? a-WP) 0]
111 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP)) (depth (rest a-WP))]
112 12687dd9 2023-08-04 jrmu [else (max (+ 1 (depth (first a-WP)))
113 12687dd9 2023-08-04 jrmu (depth (rest a-WP)))]))
114 12687dd9 2023-08-04 jrmu
115 12687dd9 2023-08-04 jrmu ;(define NESTEDWP1 '(l e v e l z e r o
116 12687dd9 2023-08-04 jrmu ; (o n e)
117 12687dd9 2023-08-04 jrmu ; (o n e)
118 12687dd9 2023-08-04 jrmu ; (o n e)
119 12687dd9 2023-08-04 jrmu ; (o n e
120 12687dd9 2023-08-04 jrmu ; (t w o
121 12687dd9 2023-08-04 jrmu ; (t h r e e))
122 12687dd9 2023-08-04 jrmu ; (t w o))))
123 12687dd9 2023-08-04 jrmu ;(define NESTEDWP2 '(l e v e l z e r o
124 12687dd9 2023-08-04 jrmu ; (o n e
125 12687dd9 2023-08-04 jrmu ; (t w o
126 12687dd9 2023-08-04 jrmu ; (t h r e e
127 12687dd9 2023-08-04 jrmu ; (f o u r))))
128 12687dd9 2023-08-04 jrmu ; (o n e
129 12687dd9 2023-08-04 jrmu ; (t w o
130 12687dd9 2023-08-04 jrmu ; (t h r e e
131 12687dd9 2023-08-04 jrmu ; (f o u r
132 12687dd9 2023-08-04 jrmu ; (f i v e
133 12687dd9 2023-08-04 jrmu ; (s i x
134 12687dd9 2023-08-04 jrmu ; (s e v e n)))))))
135 12687dd9 2023-08-04 jrmu ; (o n e
136 12687dd9 2023-08-04 jrmu ; (t w o
137 12687dd9 2023-08-04 jrmu ; (t h r e e
138 12687dd9 2023-08-04 jrmu ; (f o u r
139 12687dd9 2023-08-04 jrmu ; (f i v e
140 12687dd9 2023-08-04 jrmu ; (s i x))))))))
141 12687dd9 2023-08-04 jrmu
142 12687dd9 2023-08-04 jrmu
143 12687dd9 2023-08-04 jrmu
144 12687dd9 2023-08-04 jrmu