
On 27/09/2011, at 3:54 PM, Donn Cave wrote:
Quoth "Richard O'Keefe"
, [ ... re " Why would you write an upper bound of 0.3 on a list if you don't expect that to be included in the result? " ]
Because upper bounds are *UPPER BOUNDS* and are NOT as a rule included in the result. If you write [0,2..9] you - DO expect 0 in the result - DON'T expect 9 in the result - would be outraged if 10 were in the result.
Pardon the questions from the gallery, but ... I can sure see that 0.3 shouldn't be included in the result by overshooting the limit (i.e., 0.30000000000000004), and the above expectations about [0,2..9] are obvious enough, but now I have to ask about [0,2..8] - would you not expect 8 in the result? Or is it not an upper bound?
Quoting the Wikipedia: In mathematics, especially in order theory, an upper bound of a subset S of some partially ordered set (P, ≤) is an element of P which is greater than or equal to every element of S. ^^^^^^^^^^^ In the case of integers, where is the overshoot? I expect [L,M..U] to be the collection of all x such that L <= x <= U and x-L is n*(M-L) for some n, if M >= L, or the collection of all x such that U <= x <= L and x-L is n*(M-L) for some n, if M <= L. I don't say that's what Haskell promises. What I say is that that's what I _expect_. On the rare occasions when I've used REAL DO, getting close to the stated end point has been unimportant; not going outside the stated bounds critically important. In the case of [0,2..8], 0 <= 8 <= 8 and 8-0 is 4*(2-0), so 8 should be there. [0,1/10..3/10] :: [Ratio Int] includes 3/10 as it should; 3/10 <= 3/10 so that's fine too.