Chaddaï Fouché-2 wrote: > > 2008/3/30, Bulat Ziganshin <[EMAIL PROTECTED]>: >> although the last alternative, >> (Branch l r) <= (Branch l' r') = l == l' && r <= r' || l <= l' >> seems suspicious to me. isn't it the same as >> (Branch l r) <= (Branch l' r') = l <= l' > > Yes, it should be : > (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r' > > Lexical order for a tuple (a,b) is : > (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) > The same idea can be applied to list (where Nil is strictly less than > anything else) or other datatypes. > > -- > Jedaï > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
Chaddaï Fouché-2 wrote: > > 2008/3/30, Bulat Ziganshin <[EMAIL PROTECTED]>: >> although the last alternative, >> (Branch l r) <= (Branch l' r') = l == l' && r <= r' || l <= l' >> seems suspicious to me. isn't it the same as >> (Branch l r) <= (Branch l' r') = l <= l' > > Yes, it should be : > (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r' > > Lexical order for a tuple (a,b) is : > (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) > The same idea can be applied to list (where Nil is strictly less than > anything else) or other datatypes. > > -- > Jedaï > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > Quoted from: http://www.nabble.com/lexicographic-order-tp16381434p16388762.html Thanks for your help...I feel so embarrassed. With all of these symbolos in Haskell like -> (for types), => (in classes) etc I couldn't imagine that <= means less than or equal to!!!:clap: >Yes, it should be : >(Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r' >Lexical order for a tuple (a,b) is : >(a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) I have tested it and I have found that it is the same with (Branch l r) <= (Branch l' r') = (l == l' && r <= r') || l < l' The problem with the previous is that the compiler during the parsing takes as right (Branch l r) <= (Branch l' r') = l == l' && (r <= r') || l < l') since the infix operator && needs two operands,i.e. one on the left and the other on the right Though I can't understand why both (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r' (Branch l r) <= (Branch l' r') = l <= l' || l == l' && r <= r' give the same results and why I should take as right (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) and not (a,b) <= (a',b') iff (a <= a' or (a == a' and b <= b')) The latter seems more logical, doesn't it? -- View this message in context: http://www.nabble.com/lexicographic-order-tp16381434p16392557.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe