[MLton-user] Extended Basis Library: Partial order concept
Geoffrey Alan Washburn
geoffw at cis.upenn.edu
Tue May 8 07:47:10 PDT 2007
Vesa Karvonen wrote:
> I'm not sure whether one should use < or <= in PORDERED_CORE. I would go
> for <. This is probably mostly because that is what I got used to when
> working with the C++ STL. I don't know if there is any technical reason
> to prefer one over the other. In particular, it takes on average the
> number of operations to synthesize other relational operators from either
> < or <=:
> a < b a < b not (b <= a)
> a > b b < a not (a <= b)
> a <= b not (b < a) a <= b
> a >= b not (a < b) b <= a
> a == b not (a < b or b < a) a <= b and b <= a
> a != b a < b or b < a not (a <= b and b <= a)
> A semi-technical reason would be that < is one character shorter than <=
> and definitions using < therefore lead to a few characters shorter code.
> All other things being equal, shorter is better.
While shorter is usually better, I'm not sure I agree in this case.
At least I hypothesize that most times that someone would want to define
a partial order, they would find it more natural to define it in terms
of a reflexive, transitive, anti-symmetric relation, rather than a
transitive, anti-symmetric relation. For example, in one of my several
structures that admits a partial order (but not a total order) is an
ordering based upon subset inclusion. Therefore, I could define
val op <= = Set.isSubset
fun x < y = Set.isSubset (x, y) andalso not (Set.==(x, y))
furthermore in some cases equality will be defined in terms of <= and
therefore writing something like the above may be a little awkward.
[Geoff Washburn|geoffw at cis.upenn.edu|http://www.cis.upenn.edu/~geoffw/]
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the MLton-user