on master help sign in
Fix bug in which foldl and foldr were swapped!
3fb4ea1Evan Czaplicki
libraries/Array.elm+2−2
@@ -82,14 +82,14 @@ map = Native.Array.map
82indexedMap : (Int -> a -> b) -> Array a -> Array b
82indexedMap : (Int -> a -> b) -> Array a -> Array b
83indexedMap = Native.Array.indexedMap
83indexedMap = Native.Array.indexedMap
84
84
85−{-| Reduce an array from the left.
85+{-| Reduce an array from the left. Read `foldl` as “fold from the left”.
86
86
87 foldl (::) [] (fromList [1,2,3]) == [3,2,1]
87 foldl (::) [] (fromList [1,2,3]) == [3,2,1]
88-}
88-}
89foldl : (a -> b -> b) -> b -> Array a -> b
89foldl : (a -> b -> b) -> b -> Array a -> b
90foldl = Native.Array.foldl
90foldl = Native.Array.foldl
91
91
92−{-| Reduce an array from the right.
92+{-| Reduce an array from the right. Read `foldr` as “fold from the right”.
93
93
94 foldr (+) 0 (repeat 3 5) == 15
94 foldr (+) 0 (repeat 3 5) == 15
95-}
95-}
libraries/Native/Array.js+2−2
@@ -242,14 +242,14 @@ Elm.Native.Array.make = function(elm) {
242 }
242 }
243
243
244 function foldl(f, b, a) {
244 function foldl(f, b, a) {
245− for (var i = a.table.length - 1; i >= 0; i--) {
245+ for (var i = 0; i < a.table.length; i++) {
246 b = A2(f, a.height == 0 ? a.table[i] : foldl(f, b, a.table[i]), b);
246 b = A2(f, a.height == 0 ? a.table[i] : foldl(f, b, a.table[i]), b);
247 }
247 }
248 return b;
248 return b;
249 }
249 }
250
250
251 function foldr(f, b, a) {
251 function foldr(f, b, a) {
252− for (var i = 0; i < a.table.length; i++) {
252+ for (var i = a.table.length; i--; ) {
253 b = A2(f, a.height == 0 ? a.table[i] : foldr(f, b, a.table[i]), b);
253 b = A2(f, a.height == 0 ? a.table[i] : foldr(f, b, a.table[i]), b);
254 }
254 }
255 return b;
255 return b;
tests/elm/Test/Array.elm+2−2
@@ -40,8 +40,8 @@ tests =
40 ]
40 ]
41 mappingAndFoldingTests = [ test "map" <| assertEqual (Array.map sqrt (Array.fromList [1,4,9])) (Array.fromList [1,2,3])
41 mappingAndFoldingTests = [ test "map" <| assertEqual (Array.map sqrt (Array.fromList [1,4,9])) (Array.fromList [1,2,3])
42 , test "indexedMap" <| assertEqual (Array.indexedMap (*) (Array.fromList [5,5,5])) (Array.fromList [0,5,10])
42 , test "indexedMap" <| assertEqual (Array.indexedMap (*) (Array.fromList [5,5,5])) (Array.fromList [0,5,10])
43− , test "foldl" <| assertEqual (Array.foldl (::) [] (Array.fromList [1,2,3])) [1,2,3]
43+ , test "foldl" <| assertEqual (Array.foldl (::) [] (Array.fromList [1,2,3])) [3,2,1]
44 , test "foldr" <| assertEqual (Array.foldr (+) 0 (Array.repeat 3 5)) 15
44 , test "foldr" <| assertEqual (Array.foldr (+) 0 (Array.repeat 3 5)) 15
45− , test "foldl 2" <| assertEqual (Array.foldr (::) [] (Array.fromList [1,2,3])) [3,2,1]
45+ , test "foldr 2" <| assertEqual (Array.foldr (::) [] (Array.fromList [1,2,3])) [1,2,3]
46 ]
46 ]
47 in List.concat [creationTests, basicsTests, getAndSetTests, takingArraysApartTests, mappingAndFoldingTests]
47 in List.concat [creationTests, basicsTests, getAndSetTests, takingArraysApartTests, mappingAndFoldingTests]