From: Mathieu Bouchard Date: 2000-09-17T13:06:03+09:00 Subject: [ruby-talk:4955] Re: Conway's Quantum Superpositions > |> if (any(@value) < 10) { ... } > |> die unless all(@tests)->($data); > |> ought to be available to all Perl users. > > This can be easily accomplished by the method like > module Enumerable > def any; self.each do |item| return true if yield(item); end > return false; end > def all; self.each do |item| return false unless yield(item); end > return true; end; end > Pretty easy huh? The two are somewhat different. What you propose is two short-circuited applications of Enumerable#inject (See end of faq). I would like to see them in Enumerable (but I would like to see #inject before that) (insert strong australian accent here) What Damian proposes is that instead of wrapping an expression in a bunch of any/all blocks, you could insert "any" and "all" specifiers _inside_ the expression. This could mean that [1,2,3].any would do is mimic all the objects it contains at once, and that every message sent to that collective would be dispatched to all contained objects, and their results would be combined in a new "any" object containing all the results; eventually, when the value of a Boolean Collective is observed, something magical happens ("collapsing of states") which OR's the members of the Collective together and gives a result. Damian says it's to emulate quantum-computing constructs in a current computer, but I think he's really trying to market Prolog/Icon's goal-directed programming concepts to the Perl masses. I admit I have some difficulty separating the concepts of inject-based functions and goal-directed computing, from a point of view of result (maybe because it's been a while since i last used/seen goal-directedness, apart from regexps). The notation and execution is however different. I'd like it very much if someone would post examples of a goal-directed expression that is non-trivial (or convoluted) to write using Matz' any/all functions. PS: now that I think of it, collapsed 'true' booleans in expressions containing 'any' are tagged with the values of 'any' that produced the 'true'... or something like that. matju