> Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
> Date: Fri, 1 Nov 2002 03:08:37 +0000
> From: Andrew Wilson <[EMAIL PROTECTED]>
> Mail-Followup-To: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
> Content-Disposition: inline
> X-SMTPD: qpsmtpd/0.12, http://develooper.com/code/qpsmtpd/
> 
> On Fri, Nov 01, 2002 at 07:54:01AM +1100, Damian Conway wrote:
> > Austin Hastings wrote:
> >> traits = any ( ... )
> >> requirements = .. & ..
> >> if $requirements eq $traits
> >> 
> >> Should that be traits = all()?
> > 
> > No. Because later we say (effectively):
> > 
> >     print "True love\n"
> >         if all(@desiderata) eq any(@traits)
> > 
> > In other words we want *all* the desired characteristics to be matched
> > by *some* trait. If the comparison was C<all(...) eq all(...)>, then
> > you're asking for every characteristic to be the same as every trait,
> > which obviously can't happen.
> > 
> > This is just a case where the "logic" of English phraseology has
> > several implicit assumptions that computational logic can't just
> > fudge over.
> 
> I don't understand this either, but my quibble is where did the all in
> the all(@desiderata) come from?  

First, I'd like to say that your explanation was immaculate.  You
understand junctions perfectly, from what I can tell.

I think Damian was ignoring the the top level any() in order to make
the explanation clearer (or forgot about it ;).  Consider it as though
@desiderata contained the (all) states of only one of the (any) states
in his $requirements.  I think that's what "(effectively)" meant. 

Indeed, worry not.  It was just a bit of an oversimplification.

Luke

> Lets see if I've got this straight
> 
> a & b is equivalent to all(a, b)
> x | y is equivalent to any(x, y)
> 
> Yes?
> 
> so:
> 
>   all(a, b) eq any(a, b, c) 
> 
> should be true because all() of a and b are in the any() list.  Yes?
> 
> If I'm right about that, I would expect
> 
>   (a & b) | (c & d) eq any(a, e, g)
>  
> to be false because it should try ANY of the two junks (a & b) or  
> (c & d) the first fails because there is no b and the second fails
> because there is no c and no d.  I would also expect
> 
>   (a & b) | (c & d) | g eq any(a, e, g)
> 
> to be true because any() of the terms (g in this case) on the left is
> fully satisfied by terms on the right.  In the original example the
> @desiderata is an | junk at the topmost level.  I don't see why it
> suddenly gets all() wrapped around it.  Wouldn't that just be
> 
>   all[  any< all(), all(), all() > ]
> 
> which is the same as
> 
>   any< all(), all(), all() >
> 
> I'm not sure I'm explaining this very well, let me try with the example
> that's giving me bother.
> 
>      $requirements = "tall" & "dark" & "handsome"
>                    | "old" & "rich"
>                    | "Australian";
> 
>      for <> -> $candidate {
>          my $traits = any( split /<ws>/, $candidate );
>          print "True love: $candidate\n"
>              if $requirements eq $traits;
>      }
> 
> Lets say that $candidate = "tall dark rich Australian", traits then
> becomes any("tall", "dark", "rich", "Australian").  So, does
> $requirements eq $traits?  To me that expands to:
> 
> (
>   (
>     ("tall" eq "tall")           or \
>     ("tall" eq "dark")           or   True because "tall" eq "tall"
>     ("tall" eq "rich")           or  
>     ("tall" eq "Australian")        /
>   ) AND (
>     ("dark" eq "tall")           or \
>     ("dark" eq "dark")           or   True because "dark" eq "dark"
>     ("dark" eq "rich")           or
>     ("dark" eq "Australian")        /
>   ) AND (
>     ("handsome" eq "tall")       or \
>     ("handsome" eq "dark")       or   False no matches
>     ("handsome" eq "rich")       or
>     ("handsome" eq "Australian")    /
>   )
>   
> ) ***OR*** (
> 
>   (
>     ("old" eq "tall")            or \
>     ("old" eq "dark")            or   False no matches
>     ("old" eq "rich")            or
>     ("old" eq "Australian")         /
>   ) AND (
>     ("rich" eq "tall")           or \
>     ("rich" eq "dark")           or   True because "rich" eq "rich" 
>     ("rich" eq "rich")           or
>     ("rich" eq "Australian")        /
>   )
>   
> ) ***OR*** (
> 
>   ("Australian" eq "tall")     or \
>   ("Australian" eq "dark")     or   True because "Australian" eq "Australian"
>   ("Australian" eq "rich")     or
>   ("Australian" eq "Australian")  /
> ) 
> 
> Junk 1: "tall" & "dark" & "handsome"
> Junk 2: "old" & "rich"
> Junk 3: "Australian";
> 
> Junk 1 fails because the candidate is not handsome.  Junk 2 fails because
> the candidate is not old.  Junk 3 succeeds because the candidate is
> Australian.
> 
> This means that the candidate matches overall because junks 1, 2 and 3
> are related by | which is any.  I don't see how or why you would wrap an
> all() around that.  There is all()ness going on, but it's represented in
> the above by the ands which are in turn grouped with any (the ors).
> Why isn't this example
> 
>       print "True love\n"
>           if any(@desiderata) eq any(@traits)
> 
> Does whether it's any() or all() not depend on what the top level
> operator in the junction is?  Am I missing something?
> 
> andrew
> -- 
> Gemini: (May 21 - June 21)
> You will be the first one put up against the wall in next week's bloody
> revolution in skin care.
> 

Reply via email to