[#56333] [CommonRuby - Feature #8723][Open] Array.any? predicate returns true for empty array. — "nurettin (Nurettin Onur TUGCU)" <onurtugcu@...>
[#56368] [ruby-trunk - Bug #8730][Open] "rescue Exception" rescues Timeout::ExitException — "takiuchi (Genki Takiuchi)" <genki@...21g.com>
2013/8/28 nobu (Nobuyoshi Nakada) <nobu@ruby-lang.org>:
[#56389] [ruby-trunk - Feature #8738][Open] Integer#single_bit? (Actually Fixnum#single_bit? and Bignum#single_bit?) — "akr (Akira Tanaka)" <akr@...>
[#56407] [ruby-trunk - misc #8741][Open] email notification on bugs.ruby-lang.org is broken — "rits (First Last)" <redmine@...>
[#56517] Re: [ruby-cvs:49638] zzak:r42496 (trunk): * lib/time.rb: [DOC] Document constants by @markijbema [Fixes GH-377] — Tanaka Akira <akr@...>
2013/8/11 <zzak@ruby-lang.org>:
[#56523] [ruby-trunk - Bug #8769][Open] [PATCH] process.c (rb_fork_internal): remove cloexec setting — "normalperson (Eric Wong)" <normalperson@...>
[#56524] [ruby-trunk - Bug #8770][Open] [PATCH] process.c: avoid EINTR from Process.spawn — "normalperson (Eric Wong)" <normalperson@...>
[#56536] [ruby-trunk - Feature #8772][Open] Hash alias #| merge, and the case for Hash and Array polymorphism — "trans (Thomas Sawyer)" <redmine@...>
[#56551] [CommonRuby - Feature #8777][Open] Process.mach_absolute_time — "tenderlovemaking (Aaron Patterson)" <tenderlove@...>
[#56567] [ruby-trunk - Feature #8780][Assigned] DBM#to_h alias for #to_hash — "zzak (Zachary Scott)" <e@...>
[#56569] [ruby-trunk - Feature #8781][Open] Use require_relative() instead of require() if possible — "ko1 (Koichi Sasada)" <redmine@...>
On Sat, Aug 17, 2013 at 07:17:50AM +0900, trans (Thomas Sawyer) wrote:
(13/08/17 13:13), Aaron Patterson wrote:
(2013/08/12 15:35), ko1 (Koichi Sasada) wrote:
(2013/08/13 2:25), drbrain (Eric Hodel) wrote:
On Tue, Aug 13, 2013 at 07:38:01AM +0900, SASADA Koichi wrote:
(2013/08/16 14:21), Aaron Patterson wrote:
On Fri, Aug 16, 2013 at 03:00:59PM +0900, SASADA Koichi wrote:
Em 16-08-2013 03:24, Aaron Patterson escreveu:
On Fri, Aug 16, 2013 at 09:35:04AM -0300, Rodrigo Rosenfeld Rosas wrote:
[#56634] [ruby-trunk - Feature #8788][Open] use eventfd on newer Linux instead of pipe for timer thread — "normalperson (Eric Wong)" <normalperson@...>
(2013/08/16 10:47), normalperson (Eric Wong) wrote:
SASADA Koichi <ko1@atdot.net> wrote:
Hi
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[#56658] [ruby-trunk - Feature #8796][Open] Use GMP to accelerate Bignum operations — "akr (Akira Tanaka)" <akr@...>
[#56672] Re: [ruby-cvs:49733] eregon:r42591 (trunk): * process.c (rb_clock_gettime): document CLOCK_REALTIME and — Tanaka Akira <akr@...>
2013/8/17 <eregon@ruby-lang.org>:
On 17 August 2013 02:52, Tanaka Akira <akr@fsij.org> wrote:
[#56746] [ruby-trunk - Bug #8803][Open] Another buffer overflow — "user021 (a s)" <user021@...>
[#56753] [ruby-trunk - Feature #8804][Open] ONCE syntax — "ko1 (Koichi Sasada)" <redmine@...>
[#56762] [ruby-trunk - Bug #8805][Open] Ruby GC::Profiler returns incorrect info on Solaris (and relatives) — "sax (Eric Saxby)" <sax@...>
[#56780] [ruby-trunk - Feature #8809][Open] Process.clock_getres — "akr (Akira Tanaka)" <akr@...>
[#56795] [ruby-trunk - Bug #8816][Open] Tempfile.new may return the same name for parallel calls — "375gnu (Hleb Valoshka)" <redmine@...>
[#56809] [ruby-trunk - Feature #8820][Open] Speed up Array#index — "trans (Thomas Sawyer)" <redmine@...>
"trans (Thomas Sawyer)" <redmine@ruby-lang.org> wrote:
[#56824] [ruby-trunk - Feature #8823][Open] Run trap handler in an independent thread called "Signal thread" — "ko1 (Koichi Sasada)" <redmine@...>
2013/8/27 ko1 (Koichi Sasada) <redmine@ruby-lang.org>:
[#56839] [ANN] Ruby Developer Meeting 20130831 — "NARUSE, Yui" <naruse@...>
Hi,
Hi,
[#56861] [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones — "ko1 (Koichi Sasada)" <redmine@...>
"ko1 (Koichi Sasada)" <redmine@ruby-lang.org> wrote:
[#56866] [ruby-trunk - Feature #8834][Open] Kernel#load_relative — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>
[#56890] [ruby-trunk - Feature #8839][Open] Class and module should return the class or module that was opened — "headius (Charles Nutter)" <headius@...>
[#56894] [ruby-trunk - Feature #8840][Open] Yielder#state — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
[#56911] [ruby-trunk - Feature #8846][Open] Publicize Module#include — "matsuda (Akira Matsuda)" <ronnie@...>
[ruby-core:56345] Re: [CommonRuby - Feature #8723] Array.any? predicate returns true for empty array.
Several explanations for the correctness of how Ruby currently works
have already been given. Here's one more:
For any Enumerable, e.g. [x, y, z], Enumerable#any {|x| predicate(x) }
is essentially the Ruby way of expressing predicate(x) ∨ predicate(y) ∨
predicate(z). This is similar to calculating a sum (with addition) or a
product (with multiplication). For #all, replace the logical or with a
logical and (∧).
In Math (and therefore in Unicode) there are even big versions of ∨ and
∧ for these operations, in the same way there are big versions of Σ and
Π for sum and product notations.
What do you get when you calculate the sum of 0 elements? 0 of course.
And what do you get when you calculate the product of 0 elements? 1. Why
do you get 0 and 1 in these cases? Because 0 ad 1 are the neutral
element for addition and multiplication. The neutral element is the
number that you can add (or multiply) as many times as you want without
changing the result.
So what's the neutral element of logical or (∨)? It's false. And what's
the neutral element of logical and (∧)? It's true. That means that we
get false for [].any {|x| predicate(x) }, and true for [].all {|x|
predicate(x) }.
Changing to a more programmer-oriented viewpoint, all the above can be
computated as follows (pseudocode):
memo = neutral_element
for x in Enumerable do
memo = memo operation x # or predicate(x)
end
or in Ruby:
inject(neutral_element) { |memo, x| memo = memo operation x }
or for the inidividual cases:
sum: inject(0) { |memo, x| memo += x }
product: inject(1) { |memo, x| memo *= x }
any: inject(false) { |memo, x| memo = memo || predicate(x) }
all: inject(true) { |memo, x| memo = memo && predicate(x) }
I hope you can see the symmetry and how this all works out nicely (and
how we would need to make all kinds of weird special rules if it worked
otherwise).
Regards, Martin.
On 2013/08/02 21:42, nurettin (Nurettin Onur TUGCU) wrote:
>
> Issue #8723 has been updated by nurettin (Nurettin Onur TUGCU).
>
>
> Yes, I meant for .all? (wasn't able to edit) and the behavior is correct according to docs, and incorrect according to my interpretation of sets. (can a predicate be true when you have empty set?)
> ----------------------------------------
> Feature #8723: Array.any? predicate returns true for empty array.
> https://bugs.ruby-lang.org/issues/8723#change-40831
>
> Author: nurettin (Nurettin Onur TUGCU)
> Status: Feedback
> Priority: Normal
> Assignee:
> Category:
> Target version:
>
>
> Are all your children redheaded?
> Would this be true if you have no children?
> I have no children, therefore none of my children are redheaded.
> Therefore
> [].any?{ true } == true makes no sense.
> Expected behavior:
> [].any?{ true } == false because the array is empty.
>
>