implementation of suffix
Ulf Wiger (AL/EAB)
ulf.wiger@REDACTED
Fri May 27 15:42:51 CEST 2005
The implementation of lists:suffix/2 is as follows:
suffix(Suffix, Suffix) -> true;
suffix(Suffix, [_|Tail]) ->
suffix(Suffix, Tail);
suffix(_, []) -> false.
The programming style in lists.erl seems to be to be very conservative
about using type guards. One objection to this could be that it makes
it more difficult for Dialyzer to derive good type information from one of
the most frequently used modules, but in the case of suffix/2, I would
say that it also violates the Principle of Least Astonishment:
(n@REDACTED)13> lists:suffix(a,[1,2,3|a]).
true
(n@REDACTED)14> lists:suffix(b,[1,2,3|a]).
** exited: {function_clause,[{lists,suffix,[b,a]},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_loop,3}]} **
=ERROR REPORT==== 27-May-2005::15:36:23 ===
Error in process <0.95.0> on node 'n@REDACTED' with exit value: {function_clause,[{lists,suffix,[b,a]},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]}
Bug or feature?
/Uffe
More information about the erlang-questions
mailing list