Sum and product of an array: Difference between revisions
Content added Content deleted
(→{{header|Raven}}: Added REBOL example.) |
|||
Line 665: | Line 665: | ||
<lang raven>0 [ 1 2 3 ] each + |
<lang raven>0 [ 1 2 3 ] each + |
||
1 [ 1 2 3 ] each *</lang> |
1 [ 1 2 3 ] each *</lang> |
||
=={{header|REBOL}}== |
|||
<lang REBOL>REBOL [ |
|||
Title: "Sum and Product" |
|||
Date: 2010-01-04 |
|||
Author: oofoe |
|||
URL: http://rosettacode.org/wiki/Sum_and_product_of_array |
|||
] |
|||
; Simple: |
|||
sum: func [a [block!] /local x] [x: 0 forall a [x: x + a/1] x] |
|||
product: func [a [block!] /local x] [x: 1 forall a [x: x * a/1] x] |
|||
; Way too fancy: |
|||
redux: func [ |
|||
"Applies an operation across an array to produce a reduced value." |
|||
a [block!] "Array to operate on." |
|||
op [word!] "Operation to perform." |
|||
/init x "Initial value (default 0)." |
|||
][if not init [x: 0] forall a [x: do compose [x (op) (a/1)]] x] |
|||
rsum: func [a [block!]][redux a '+] |
|||
rproduct: func [a [block!]][redux/init a '* 1] |
|||
; Tests: |
|||
assert: func [code][print [either do code [" ok"]["FAIL"] mold code]] |
|||
print "Simple dedicated functions:" |
|||
assert [55 = sum [1 2 3 4 5 6 7 8 9 10]] |
|||
assert [3628800 = product [1 2 3 4 5 6 7 8 9 10]] |
|||
print [crlf "Fancy reducing function:"] |
|||
assert [55 = rsum [1 2 3 4 5 6 7 8 9 10]] |
|||
assert [3628800 = rproduct [1 2 3 4 5 6 7 8 9 10]]</lang> |
|||
Output: |
|||
<pre>Simple dedicated functions: |
|||
ok [55 = sum [1 2 3 4 5 6 7 8 9 10]] |
|||
ok [3628800 = product [1 2 3 4 5 6 7 8 9 10]] |
|||
Fancy reducing function: |
|||
ok [55 = rsum [1 2 3 4 5 6 7 8 9 10]] |
|||
ok [3628800 = rproduct [1 2 3 4 5 6 7 8 9 10]]</pre> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
||
<lang ruby>arr = [1,2,3,4,5] # or ary = *1..5, or ary = (1..5).to_a |
<lang ruby>arr = [1,2,3,4,5] # or ary = *1..5, or ary = (1..5).to_a |