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