Loops/With multiple ranges: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 2,018: | Line 2,018: | ||
prod = -793,618,560 |
prod = -793,618,560 |
||
</pre> |
</pre> |
||
=={{header|Picat}}== |
|||
Picat has support for multiple loop variables, but the index variables for each range must be different: |
|||
<lang Picat>foreach(I in 1..3, J in 4..6, K in 7..9) |
|||
% ... |
|||
end</lang> |
|||
Here's a variant using the single loop variable <code>J</code>. |
|||
<lang Picat>go => |
|||
Prod= 1, |
|||
Sum= 0, |
|||
X= +5, |
|||
Y= -5, |
|||
Z= -2, |
|||
One= 1, |
|||
Three= 3, |
|||
Seven= 7, |
|||
Ranges = [-Three..Three..3**3, |
|||
-Seven..X.. +Seven, |
|||
555..550-Y, |
|||
22..-Three..-28, |
|||
1927..1939, |
|||
X..Z..Y, |
|||
11**X..11**X + One |
|||
], |
|||
foreach(Range in Ranges, J in Range) |
|||
Sum := Sum + abs(J), |
|||
if abs(Prod) < 2**27, J != 0 then |
|||
Prod := Prod * J |
|||
end |
|||
end, |
|||
println(sum=Sum), |
|||
println(prod=Prod), |
|||
nl.</lang> |
|||
{{out}} |
|||
<pre>sum = 348173 |
|||
prod = -793618560</pre> |
|||
Another approach is to first concatenate the ranges and then flatten to a single list: |
|||
<lang Picat> % ... |
|||
foreach(J in [-Three..Three..3**3, |
|||
-Seven..X.. +Seven, |
|||
555..550-Y, |
|||
22..-Three..-28, |
|||
1927..1939, |
|||
X..Z..Y, |
|||
11**X..11**X + One |
|||
].flatten |
|||
) |
|||
Sum := Sum + abs(J), |
|||
if abs(Prod) < 2**27, J != 0 then |
|||
Prod := Prod * J |
|||
end |
|||
end, |
|||
% ... |
|||
</lang> |
|||
=={{header|Prolog}}== |
=={{header|Prolog}}== |