Loops/With multiple ranges: Difference between revisions

→‎{{header|Haskell}}: added solution
(Added 11l)
(→‎{{header|Haskell}}: added solution)
Line 1,336:
<pre> sum= 348177
prod= -793618560</pre>
 
=={{header|Haskell}}==
 
Haskell does not have loops. Programmers use either explicit recursion or recursive schemes (folds or unfolds) for looping. The following code mimics the PL/1 example using composition of left folds in order to handle multiple ranges:
 
<lang haskell>loop :: (b -> a -> b) -> b -> [[a]] -> b
loop = foldl . foldl
 
example = let
x = 5
y = -5
z = -2
one = 1
three = 3
seven = 7
in
loop
-- body
(
\(sum, prod) j ->
(
sum + abs j,
if abs prod < 2^27 && j /= 0
then prod * j else prod
)
)
-- initial state
(0, 1)
-- ranges
[ [-three, -three + three .. 3^3]
, [-seven, -seven + x .. seven]
, [555 .. 550 - y]
, [22, 22 - three .. -28]
, [1927 .. 1939]
, [x, x + z .. y]
, [11^x .. 11^x + one] ]</lang>
 
=={{header|J}}==
Anonymous user