> 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.
>