@@ -61,6 +61,14 @@ impl<T> List<T> {
6161 Cons ( ref head, _) => Some ( head)
6262 }
6363 }
64+
65+ /// Returns all but the first element of a list
66+ pub fn tail ( & self ) -> Option < @List < T > > {
67+ match * self {
68+ Nil => None ,
69+ Cons ( _, tail) => Some ( tail)
70+ }
71+ }
6472}
6573
6674impl < T > Container for List < T > {
@@ -78,14 +86,6 @@ impl<T:Eq> List<T> {
7886 }
7987}
8088
81- /// Returns all but the first element of a list
82- pub fn tail < T > ( list : @List < T > ) -> @List < T > {
83- match * list {
84- Cons ( _, tail) => return tail,
85- Nil => fail ! ( "list empty" )
86- }
87- }
88-
8989/// Appends one list to another
9090pub fn append < T : Clone + ' static > ( list : @List < T > , other : @List < T > ) -> @List < T > {
9191 match * list {
@@ -117,7 +117,7 @@ fn push<T:Clone>(ll: &mut @list<T>, vv: T) {
117117
118118#[ cfg( test) ]
119119mod tests {
120- use list:: { List , Nil , tail } ;
120+ use list:: { List , Nil } ;
121121 use list;
122122
123123 #[ test]
@@ -143,13 +143,13 @@ mod tests {
143143
144144 #[ test]
145145 fn test_from_vec ( ) {
146- let list = @ List :: from_vec ( [ 0 , 1 , 2 ] ) ;
146+ let list = List :: from_vec ( [ 0 , 1 , 2 ] ) ;
147147 assert_eq ! ( list. head( ) . unwrap( ) , & 0 ) ;
148148
149- let mut tail = tail ( list ) ;
149+ let mut tail = list . tail ( ) . unwrap ( ) ;
150150 assert_eq ! ( tail. head( ) . unwrap( ) , & 1 ) ;
151151
152- tail = tail ( tail) ;
152+ tail = tail. tail ( ) . unwrap ( ) ;
153153 assert_eq ! ( tail. head( ) . unwrap( ) , & 2 ) ;
154154 }
155155
0 commit comments