Hi, it's ITO Friday again. I still have an improved patch for the reduce function (http://en.wikipedia.org/wiki/Reduce_%28higher-order_function%29) lying around (see attachment). It adds two versions of the function: 1) One that takes an initial value. integer sum = list::reduce(integer x, integer y, 0, [ 1, 2, 3 ], { return x + y; }); integer product = list::reduce(integer x, integer y, 1, [ 1, 2, 3 ], { return x * y; }) 2) One were the initial value is the value of the first list entry. Here the list must of course have at least one entry. integer min = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x < y ? x : y; }); integer max = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x > y ? x : y; }); The behaviour is now analogous to Python's reduce so it shouldn't be completely screwed. The patch contains no binary incompatibility to libycp or the bytecode. Please comment. ciao Arvin
On Fri, Jun 20, 2008 at 10:01:16AM +0200, Arvin Schnell wrote:
it's ITO Friday again. I still have an improved patch for the reduce function (http://en.wikipedia.org/wiki/Reduce_%28higher-order_function%29) lying around (see attachment). It adds two versions of the function:
1) One that takes an initial value.
integer sum = list::reduce(integer x, integer y, 0, [ 1, 2, 3 ], { return x + y; }); integer product = list::reduce(integer x, integer y, 1, [ 1, 2, 3 ], { return x * y; })
2) One were the initial value is the value of the first list entry. Here the list must of course have at least one entry.
integer min = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x < y ? x : y; }); integer max = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x > y ? x : y; });
The behaviour is now analogous to Python's reduce so it shouldn't be completely screwed. The patch contains no binary incompatibility to libycp or the bytecode.
Please comment.
Hey, that's nice. I notice that the variant with an external initializer uses 2 different types. That is worth pointing out explicitly (as an advanced example): list<string> ls = ["Foo", "bar", "baz"]; integer total_length = list::reduce(integer l, string s, 0, ls, { return l + size(s); }); (The other variant has no other choice than using a single type, since it takes a single data argument (which is a list).) Also, how about some more meaningful names than reduce_1, reduce_2? Eg. according to the initializer: reduce_internal, reduce_external. Hmm, would it make sense to use "list::shift" and implement reduce_internal using reduce_external? If noone objects, the next steps would be completing the docs (mainly examples, corner cases), adding test cases, svn, autobuild. -- Martin Vidner, YaST developer http://en.opensuse.org/User:Mvidner Kuracke oddeleni v restauraci je jako fekalni oddeleni v bazenu -- To unsubscribe, e-mail: yast-devel+unsubscribe@opensuse.org For additional commands, e-mail: yast-devel+help@opensuse.org
On Fri, Jun 20, 2008 at 01:02:31PM +0200, Martin Vidner wrote:
On Fri, Jun 20, 2008 at 10:01:16AM +0200, Arvin Schnell wrote:
it's ITO Friday again. I still have an improved patch for the reduce function (http://en.wikipedia.org/wiki/Reduce_%28higher-order_function%29) lying around (see attachment). It adds two versions of the function:
1) One that takes an initial value.
integer sum = list::reduce(integer x, integer y, 0, [ 1, 2, 3 ], { return x + y; }); integer product = list::reduce(integer x, integer y, 1, [ 1, 2, 3 ], { return x * y; })
2) One were the initial value is the value of the first list entry. Here the list must of course have at least one entry.
integer min = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x < y ? x : y; }); integer max = list::reduce(integer x, integer y, [ 1, 2, 3 ], { return x > y ? x : y; });
The behaviour is now analogous to Python's reduce so it shouldn't be completely screwed. The patch contains no binary incompatibility to libycp or the bytecode.
Please comment.
Hey, that's nice.
I notice that the variant with an external initializer uses 2 different types. That is worth pointing out explicitly (as an advanced example):
Sure, I'll mention it in the docu.
Hmm, would it make sense to use "list::shift" and implement reduce_internal using reduce_external?
Maybe, but we would require list::shift in C++. Since it wouldn't affect the YCP interface it can always be improved.
If noone objects, the next steps would be completing the docs (mainly examples, corner cases), adding test cases, svn, autobuild.
Yes, I'll do so. ciao Arvin -- To unsubscribe, e-mail: yast-devel+unsubscribe@opensuse.org For additional commands, e-mail: yast-devel+help@opensuse.org
participants (2)
-
Arvin Schnell
-
Martin Vidner