@@ -10,8 +10,8 @@ enum list<T> {
10
10
}
11
11
12
12
#[ doc = "Create a list from a vector" ]
13
- fn from_vec < T : copy > ( v : [ const T ] ) -> list < T > {
14
- * vec:: foldr ( v, @nil :: < T > , { |h, t| @cons ( h, t) } )
13
+ fn from_vec < T : copy > ( v : [ const T ] ) -> @ list < T > {
14
+ @ vec:: foldr ( v, @nil :: < T > , { |h, t| @cons ( h, t) } )
15
15
}
16
16
17
17
#[ doc = "
@@ -27,7 +27,7 @@ accumulated result.
27
27
* z - The initial value
28
28
* f - The function to apply
29
29
" ]
30
- fn foldl < T : copy , U > ( z : T , ls : list < U > , f : fn ( T , U ) -> T ) -> T {
30
+ fn foldl < T : copy , U > ( z : T , ls : @ list < U > , f : fn ( T , U ) -> T ) -> T {
31
31
let mut accum: T = z;
32
32
iter ( ls) { |elt| accum = f ( accum, elt) ; }
33
33
accum
@@ -40,105 +40,92 @@ Apply function `f` to each element of `v`, starting from the first.
40
40
When function `f` returns true then an option containing the element
41
41
is returned. If `f` matches no elements then none is returned.
42
42
" ]
43
- fn find < T : copy > ( ls : list < T > , f : fn ( T ) -> bool ) -> option < T > {
43
+ fn find < T : copy > ( ls : @ list < T > , f : fn ( T ) -> bool ) -> option < T > {
44
44
let mut ls = ls;
45
45
loop {
46
46
ls = alt ls {
47
47
cons( hd, tl) {
48
48
if f ( hd) { ret some ( hd) ; }
49
- * tl
49
+ tl
50
50
}
51
51
nil { ret none; }
52
52
}
53
53
} ;
54
54
}
55
55
56
56
#[ doc = "Returns true if a list contains an element with the given value" ]
57
- fn has < T : copy > ( ls : list < T > , elt : T ) -> bool {
57
+ fn has < T : copy > ( ls : @ list < T > , elt : T ) -> bool {
58
58
for each( ls) { |e|
59
59
if e == elt { ret true ; }
60
60
}
61
61
ret false ;
62
62
}
63
63
64
64
#[ doc = "Returns true if the list is empty" ]
65
- pure fn is_empty < T : copy > ( ls : list < T > ) -> bool {
66
- alt ls {
65
+ pure fn is_empty < T : copy > ( ls : @ list < T > ) -> bool {
66
+ alt * ls {
67
67
nil { true }
68
68
_ { false }
69
69
}
70
70
}
71
71
72
72
#[ doc = "Returns true if the list is not empty" ]
73
- pure fn is_not_empty < T : copy > ( ls : list < T > ) -> bool {
73
+ pure fn is_not_empty < T : copy > ( ls : @ list < T > ) -> bool {
74
74
ret ! is_empty( ls) ;
75
75
}
76
76
77
77
#[ doc = "Returns the length of a list" ]
78
- fn len < T > ( ls : list < T > ) -> uint {
78
+ fn len < T > ( ls : @ list < T > ) -> uint {
79
79
let mut count = 0 u;
80
80
iter ( ls) { |_e| count += 1 u; }
81
81
count
82
82
}
83
83
84
84
#[ doc = "Returns all but the first element of a list" ]
85
- pure fn tail < T : copy > ( ls : list < T > ) -> list < T > {
86
- alt ls {
87
- cons( _, tl) { ret * tl; }
85
+ pure fn tail < T : copy > ( ls : @ list < T > ) -> list < T > {
86
+ alt * ls {
87
+ cons( _, tl) { ret tl; }
88
88
nil { fail "list empty" }
89
89
}
90
90
}
91
91
92
92
#[ doc = "Returns the first element of a list" ]
93
- pure fn head < T : copy > ( ls : list < T > ) -> T {
94
- alt check ls { cons( hd, _) { hd } }
93
+ pure fn head < T : copy > ( ls : @ list < T > ) -> T {
94
+ alt check * ls { cons( hd, _) { hd } }
95
95
}
96
96
97
97
#[ doc = "Appends one list to another" ]
98
- pure fn append < T : copy > ( l : list < T > , m : list < T > ) -> list < T > {
99
- alt l {
98
+ pure fn append < T : copy > ( l : @ list < T > , m : @ list < T > ) -> @ list < T > {
99
+ alt * l {
100
100
nil { ret m; }
101
- cons ( x, xs) { let rest = append ( * xs, m) ; ret cons( x, @rest) ; }
101
+ cons ( x, xs) { let rest = append ( * xs, m) ; ret @ cons ( x, @rest) ; }
102
102
}
103
103
}
104
104
105
105
#[ doc = "Iterate over a list" ]
106
- fn iter < T > ( l : list < T > , f : fn ( T ) ) {
107
- alt l {
108
- cons( hd, tl) {
109
- f ( hd) ;
110
- let mut cur = tl;
111
- loop {
112
- alt * cur {
113
- cons( hd, tl) {
114
- f ( hd) ;
115
- cur = tl;
116
- }
117
- nil { break; }
118
- }
106
+ fn iter < T > ( l : @list < T > , f : fn ( T ) ) {
107
+ let mut cur = l;
108
+ loop {
109
+ cur = alt * cur {
110
+ cons( hd, tl) {
111
+ f ( hd) ;
112
+ tl
113
+ }
114
+ nil { break; }
119
115
}
120
- }
121
- nil { }
122
116
}
123
117
}
124
118
125
119
#[ doc = "Iterate over a list" ]
126
120
fn each < T > ( l : list < T > , f : fn ( T ) -> bool ) {
127
- alt l {
128
- cons( hd, tl) {
129
- if !f ( hd) { ret; }
130
- let mut cur = tl;
131
- loop {
132
- alt * cur {
133
- cons( hd, tl) {
134
- if !f ( hd) { ret; }
135
- cur = tl;
136
- }
137
- nil { break; }
138
- }
121
+ let mut cur = l;
122
+ loop {
123
+ cur = alt * cur {
124
+ cons( hd, tl) {
125
+ if !f ( hd) { ret; }
126
+ }
127
+ nil { break; }
139
128
}
140
- }
141
- nil { }
142
129
}
143
130
}
144
131
@@ -147,7 +134,7 @@ mod tests {
147
134
148
135
#[ test]
149
136
fn test_is_empty ( ) {
150
- let empty : list:: list < int > = from_vec ( [ ] ) ;
137
+ let empty : @ list:: list < int > = from_vec ( [ ] ) ;
151
138
let full1 = from_vec ( [ 1 ] ) ;
152
139
let full2 = from_vec ( [ 'r' , 'u' ] ) ;
153
140
@@ -175,7 +162,7 @@ mod tests {
175
162
176
163
#[ test]
177
164
fn test_from_vec_empty ( ) {
178
- let empty : list:: list < int > = from_vec ( [ ] ) ;
165
+ let empty : @ list:: list < int > = from_vec ( [ ] ) ;
179
166
assert ( empty == list:: nil :: < int > ) ;
180
167
}
181
168
@@ -196,7 +183,7 @@ mod tests {
196
183
fn test_foldl ( ) {
197
184
fn add ( & & a: uint , & & b: int ) -> uint { ret a + ( b as uint ) ; }
198
185
let l = from_vec ( [ 0 , 1 , 2 , 3 , 4 ] ) ;
199
- let empty = list:: nil :: < int > ;
186
+ let empty = @ list:: nil :: < int > ;
200
187
assert ( list:: foldl ( 0 u, l, add) == 10 u) ;
201
188
assert ( list:: foldl ( 0 u, empty, add) == 0 u) ;
202
189
}
@@ -229,7 +216,7 @@ mod tests {
229
216
#[ test]
230
217
fn test_has ( ) {
231
218
let l = from_vec ( [ 5 , 8 , 6 ] ) ;
232
- let empty = list:: nil :: < int > ;
219
+ let empty = @ list:: nil :: < int > ;
233
220
assert ( list:: has ( l, 5 ) ) ;
234
221
assert ( !list:: has ( l, 7 ) ) ;
235
222
assert ( list:: has ( l, 8 ) ) ;
@@ -239,7 +226,7 @@ mod tests {
239
226
#[ test]
240
227
fn test_len ( ) {
241
228
let l = from_vec ( [ 0 , 1 , 2 ] ) ;
242
- let empty = list:: nil :: < int > ;
229
+ let empty = @ list:: nil :: < int > ;
243
230
assert ( list:: len ( l) == 3 u) ;
244
231
assert ( list:: len ( empty) == 0 u) ;
245
232
}
0 commit comments