[erlang-bugs] Document of lists:append/2

Bengt Kleberg <>
Mon Feb 10 07:45:40 CET 2014


Greetings,

Some functions have arguments that would be time consuming to check for
correctness. This might be a reason for not mandating a check of all
arguments.


bengt

On Mon, 2014-02-10 at 01:37 -0500, Heinz Nikolaus Gies wrote:
> I somewhat disagree on that point. Shouldn’t functions crash given
> badly typed inputs? That sounds like the reasonable thing to to when
> following the fail early paradigm and I always got the impression a
> lot of the functions in the core libraries happily die a tragic death
> if a wrong input comes too close to them.
> ---
> Cheers,
> Heinz Nikolaus Gies
> 
> 
> 
> 
> 
> 
> On Feb 9, 2014, at 11:43 PM, Bob Ippolito <> wrote:
> 
> > If you assume that all functions have undefined behavior when given
> > incorrectly typed inputs, it's perfectly consistent. Erlang code
> > tends to assume correctly typed input because it's simpler to
> > implement and the types can often be checked mechanically with tools
> > such as dialyzer.
> > 
> > On Sunday, February 9, 2014, Yoshihiro Tanaka <>
> > wrote:
> >         Right. I guess I'm questioning the accuracy of the document.
> >         
> >         
> >         On Sun, Feb 9, 2014 at 7:52 PM, Siraaj Khandkar
> >         <> wrote:
> >                 This is just a surprising side effect of dynamic
> >                 typing. To perform the
> >                 append, the left list is traversed and the right is
> >                 just blindly used as
> >                 a tail, so it is never introspected and thus never
> >                 has an opportunity to
> >                 crash.
> >                 
> >                 
> >                 On 2/9/14, 10:30 PM, Yoshihiro Tanaka wrote:
> >                 > Hi,
> >                 >
> >                 > In the
> >                 document :http://www.erlang.org/doc/man/lists.html#append-2
> >                 > It says:
> >                 > append(List1, List2) -> List3, List1 = List2 =
> >                 List3 = [T], T = term.
> >                 >
> >                 > But considering the following behavior, it does
> >                 not look correct:
> >                 >
> >                 > 1> [] ++ undef.
> >                 > undef
> >                 > 2> undef ++ [].
> >                 > ** exception error: bad argument
> >                 >      in operator  ++/2
> >                 >         called as undef ++ []
> >                 > 3> [a,b] ++ undef.
> >                 > [a,b|undef]
> >                 > 4>
> >                 >
> >                 >
> >                 > Thoughts ?
> >                 >
> >                 >
> >                 > Thank you
> >                 > Yoshihiro
> >                 
> >         
> >         
> > _______________________________________________
> > erlang-bugs mailing list
> > 
> > http://erlang.org/mailman/listinfo/erlang-bugs
> 
> _______________________________________________
> erlang-bugs mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-bugs



More information about the erlang-bugs mailing list