@@ -86,17 +86,6 @@ impl<T:Eq> List<T> {
86
86
}
87
87
}
88
88
89
- /// Appends one list to another
90
- pub fn append < T : Clone + ' static > ( list : @List < T > , other : @List < T > ) -> @List < T > {
91
- match * list {
92
- Nil => return other,
93
- Cons ( ref head, tail) => {
94
- let rest = append ( tail, other) ;
95
- return @Cons ( ( * head) . clone ( ) , rest) ;
96
- }
97
- }
98
- }
99
-
100
89
impl < T : ' static + Clone > List < T > {
101
90
/// Create a list from a vector
102
91
pub fn from_vec ( v : & [ T ] ) -> List < T > {
@@ -105,6 +94,17 @@ impl<T:'static + Clone> List<T> {
105
94
_ => v. rev_iter ( ) . fold ( Nil , |tail, value : & T | Cons ( value. clone ( ) , @tail) )
106
95
}
107
96
}
97
+
98
+ /// Appends one list to another, returning a new list
99
+ pub fn append ( & self , other : List < T > ) -> List < T > {
100
+ match other {
101
+ Nil => return self . clone ( ) ,
102
+ _ => match * self {
103
+ Nil => return other,
104
+ Cons ( ref value, tail) => Cons ( value. clone ( ) , @tail. append ( other) )
105
+ }
106
+ }
107
+ }
108
108
}
109
109
110
110
/*
@@ -225,7 +225,7 @@ mod tests {
225
225
226
226
#[ test]
227
227
fn test_append ( ) {
228
- assert ! ( @ List :: from_vec( [ 1 , 2 , 3 , 4 ] )
229
- == list :: append ( @ List :: from_vec( [ 1 , 2 ] ) , @ List :: from_vec( [ 3 , 4 ] ) ) ) ;
228
+ assert_eq ! ( List :: from_vec( [ 1 , 2 , 3 , 4 ] ) ,
229
+ List :: from_vec( [ 1 , 2 ] ) . append ( List :: from_vec( [ 3 , 4 ] ) ) ) ;
230
230
}
231
231
}
0 commit comments