-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter3.rkt
138 lines (119 loc) · 2.74 KB
/
chapter3.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#lang r5rs
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
((eq? (car lat) a)(cdr lat))
(else (cons (car lat)
(rember a (cdr lat)))))))
(display (rember 'and '(bacon lettuce and tomato)))
(newline)
(define firsts
(lambda (l)
(cond
((null? l) (quote ()))
(else (cons (car (car l))(firsts (cdr l)))))))
(display (firsts '((a b c) (coisa alguma))))
(newline)
(define insertR
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons old
(cons new (cdr lat))))
(else (cons (car lat)
(insertR new old
(cdr lat)))))))))
(display (insertR 'c 'b '(a b d)))
(newline)
(define insertL
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons new lat))
(else (cons (car lat)
(insertL new old
(cdr lat)))))))))
(display (insertL 'c 'b '(a b d)))
(newline)
(define subst
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons new (cdr lat)))
(else (cons (car lat)
(subst new old
(cdr lat)))))))))
(display (subst 'c 'b '(a b d)))
(newline)
(define subst2
(lambda (new o1 o2 lat)
(cond
((null? lat) (quote ()))
(else (cond
((or (eq? (car lat) o1) (eq? (car lat) o2))
(cons new (cdr lat)))
(else (cons (car lat)
(subst2 new o1 o2
(cdr lat)))))))))
(display (subst2 'novo 'b 'c '(a b c)))
(newline)
(define multirember
(lambda (a lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) a) (multirember a (cdr lat)))
(else (cons (car lat)
(multirember a
(cdr lat)))))))))
(display (multirember 'cup '(coffee cup tea cup hick cup)))
(newline)
(define multiinsertR
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons (car lat)
(cons new
(multiinsertR new old
(cdr lat)))))
(else (cons (car lat)
(multiinsertR new old
(cdr lat)))))))))
(display (multiinsertR 'a 'b '(b c b c)))
(newline)
(define multiinsertL
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons new
(cons old
(multiinsertL new old (cdr lat)))))
(else (cons (car lat)
(multiinsertL new old
(cdr lat)))))))))
(display (multiinsertL 'a 'b '(b c b c)))
(newline)
(define multisubst
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons new
(multisubst new old (cdr lat))))
(else (cons (car lat)
(multisubst new old
(cdr lat)))))))))
(display (multisubst 'c 'b '(a b d b)))
(newline)