[erlang-questions] lists:seq/[2,3] bug?
Kostis Sagonas
kostis@REDACTED
Fri Sep 19 17:30:46 CEST 2008
Richard A. O'Keefe wrote:
> On 19 Sep 2008, at 6:37 am, Nicolas Charpentier wrote:
>
>> Richard A. O'Keefe wrote:
>>>> I think that your proposition will break a lot of code.
>>> Why do you think that? The correction I want ONLY affects
>>> cases where the current version blows up; whenever the
>>> current version returns any answer at all, mine returns the
>>> same one.
>> Hi,
>>
>> With the current implementation, the process crashes if it calls
>> lists:seq(N,M) with M<N. (A crash means an unexpected)
>> With your proposition, the same process will continue to do things
>> but using an empty sequence.
>
> ONLY in the case M = N - 1, and BECAUSE IT MAKES SENSE.
Despite all the shouting, I've yet to read a coherent argument why the
case M = N - 1 is more special than e.g. the case M = N - 42.
[Please realize that similarly to "expect", the expression "makes sense"
is also highly subjective. I do not see why throwing an exception for
M<N does not make sense.]
Haskell, where exceptions are problematic, at least is consistent in its
behaviour. In Haskell the equivalent of lists:seq/2 defines a *total*
function over the integers, not a function that returns [] in some
special cases only. Disregarding for a moment that throwing exceptions
in Erlang is OK, why would Erlang have a different behaviour ?
>> For me, this is a big difference and all running applications must
>> be checked to ensure that they can handle empty sequence correctly.
>
> It is also the case right now that all existing code that uses seq
> should be checked to ensure that it DOESN'T expect empty results.
> I know what the manual says, but people find it easier to remember
> stuff that makes sense, and so it's entirely credible that other
> people than me would have test cases
> [F(I) || I <- lists:seq(1, N)]
> that fall down dead when N = 0 *but shouldn't*.
I repeat: If we were to change the behaviour of lists:seq/2 -- and so
far I've not yet read something that convinced me we should -- how is
the above different than e.g. lists:seq(8, 5) ?
Kostis
More information about the erlang-questions
mailing list