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
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)
13 12687dd9 2023-08-04 jrmu ;fun-for-wp : WP -> ???
14 12687dd9 2023-08-04 jrmu ;(define (fun-for-wp a-WP)
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)) ...]))
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.
24 12687dd9 2023-08-04 jrmu (define (size a-WP)
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)))]))
31 12687dd9 2023-08-04 jrmu (define MRWP '((h i)
37 12687dd9 2023-08-04 jrmu (define MRSWP '(h i m y n a m e i s
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)).
52 12687dd9 2023-08-04 jrmu ;occurs1 : WP symbol -> number
53 12687dd9 2023-08-04 jrmu ;(define (occurs1 a-WP a-symbol)
55 12687dd9 2023-08-04 jrmu ; [(empty? a-WP) 0]
56 12687dd9 2023-08-04 jrmu ; [(symbol? (first a-WP))
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)]))
62 12687dd9 2023-08-04 jrmu (define (occurs1 a-WP a-symbol)
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)]))
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).
74 12687dd9 2023-08-04 jrmu (define (occurs2 a-WP a-symbol)
76 12687dd9 2023-08-04 jrmu [(empty? a-WP) 0]
77 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP))
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))]))
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.
88 12687dd9 2023-08-04 jrmu (define (replace new old a-WP)
90 12687dd9 2023-08-04 jrmu [(empty? a-WP) empty]
91 12687dd9 2023-08-04 jrmu [(symbol? (first a-WP))
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)))]))
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.
108 12687dd9 2023-08-04 jrmu (define (depth a-WP)
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)))]))
115 12687dd9 2023-08-04 jrmu ;(define NESTEDWP1 '(l e v e l z e r 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
126 12687dd9 2023-08-04 jrmu ; (t h r e e
127 12687dd9 2023-08-04 jrmu ; (f o u r))))
130 12687dd9 2023-08-04 jrmu ; (t h r e e
134 12687dd9 2023-08-04 jrmu ; (s e v e n)))))))
137 12687dd9 2023-08-04 jrmu ; (t h r e e
140 12687dd9 2023-08-04 jrmu ; (s i x))))))))