@@ -65,18 +65,18 @@ fn flat_map<A,B,IA:iterable<A>,IB:iterable<B>>(
65
65
}
66
66
}
67
67
68
- fn foldl < A , B : copy , IA : iterable < A > > ( self : IA , b0 : B , blk : fn ( B , A ) -> B ) -> B {
69
- let b = b0;
68
+ fn foldl < A , B , IA : iterable < A > > ( self : IA , + b0 : B , blk : fn ( - B , A ) -> B ) -> B {
69
+ let b <- b0;
70
70
self . iter { |a|
71
71
b = blk ( b, a) ;
72
72
}
73
73
ret b;
74
74
}
75
75
76
- fn foldr < A : copy , B : copy , IA : iterable < A > > (
77
- self : IA , b0 : B , blk : fn ( A , B ) -> B ) -> B {
76
+ fn foldr < A : copy , B , IA : iterable < A > > (
77
+ self : IA , + b0 : B , blk : fn ( A , - B ) -> B ) -> B {
78
78
79
- let b = b0;
79
+ let b < - b0;
80
80
reverse ( self ) { |a|
81
81
b = blk ( a, b) ;
82
82
}
@@ -111,10 +111,13 @@ fn repeat(times: uint, blk: fn()) {
111
111
}
112
112
113
113
fn min < A : copy , IA : iterable < A > > ( self : IA ) -> A {
114
- alt foldl ( self , none) { |a, b|
114
+ alt foldl :: < A , option < A > , IA > ( self , none) { |a, b|
115
115
alt a {
116
- some( a) { some ( math:: min ( a, b) ) }
117
- none { some( b) }
116
+ some( a_) if a_ < b {
117
+ // FIXME: Not sure if this is successfully optimized to a move
118
+ a
119
+ }
120
+ _ { some ( b) }
118
121
}
119
122
} {
120
123
some ( val) { val }
@@ -123,10 +126,13 @@ fn min<A:copy,IA:iterable<A>>(self: IA) -> A {
123
126
}
124
127
125
128
fn max<A : copy , IA : iterable < A > > ( self : IA ) -> A {
126
- alt foldl ( self , none) { |a, b|
129
+ alt foldl:: < A , option < A > , IA > ( self , none) { |a, b|
127
130
alt a {
128
- some( a) { some ( math:: max ( a, b) ) }
129
- none { some( b) }
131
+ some( a_) if a_ > b {
132
+ // FIXME: Not sure if this is successfully optimized to a move
133
+ a
134
+ }
135
+ _ { some( b) }
130
136
}
131
137
} {
132
138
some( val) { val }
@@ -252,7 +258,7 @@ fn test_count() {
252
258
253
259
#[ test]
254
260
fn test_foldr ( ) {
255
- fn sub ( & & a: int , & & b: int ) -> int {
261
+ fn sub ( & & a: int , - b : int ) -> int {
256
262
a - b
257
263
}
258
264
let sum = foldr ( [ 1 , 2 , 3 , 4 ] , 0 , sub) ;
0 commit comments