<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The way I see it, you’re doing a
right thing – returning an empty string. It is just a matter of covering
another pattern: substr( [], N ) -> []. Unless you want to argue that 0 div
N = 0 is an error? </span></font><font size=2 color=navy face=Wingdings><span
style='font-size:10.0pt;font-family:Wingdings;color:navy'>J</span></font><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>V.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> Robert Virding
[mailto:rvirding@gmail.com] <br>
<b><span style='font-weight:bold'>Sent:</span></b> 05 December 2008 03:51 PM<br>
<b><span style='font-weight:bold'>To:</span></b> Valentin Micic<br>
<b><span style='font-weight:bold'>Cc:</span></b> Vlad Dumitrescu;
erlang-questions<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [erlang-questions]
string:substr/2 gives confusing error message</span></font><o:p></o:p></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>I think in cases like
this you will find that the person who wrote the module (me most likely) was
just trying to be kind and return something "sensible" if the
arguments are of the right type and not too crazy. Like asking for more
characters from a list than exists.<br>
<br>
I have now thought this over and come to the conclusion that you probably
shouldn't be kind but generate an error in these situations. Being kind will
often come back and bite you later in an unpleasant way.<br>
<br>
I personally don't see any problem with a function_clause error as these means
that there was a bad argument. It could be helpful if the error came from the
function which is called, but as long as it comes from a function which is
cleary related to the call, as in this case, I don't worry about it.<br>
<br>
How to return errors is a difficult problem. If you catch them at a higher
level how do you then return a helpful error? And helpful fo whom?<br>
<br>
Robert<o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>2008/12/5 Valentin Micic <<a href="mailto:v@pharos-avantgard.com">v@pharos-avantgard.com</a>><o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>I think that depends how you want to look at it...<br>
One may argue that<br>
       string:substr([], 2 )<br>
does not make much sense as a statement, but then, I'd say that:<br>
       string:substr("1", 2 )<br>
does not make to much sense either, and yet it returns [].<br>
IMO, both functions should behave the same way, and to be pragmatic, return<br>
an empty list (not a badarg exception).<br>
<font color="#888888"><span style='color:#888888'><br>
V.</span></font><o:p></o:p></span></font></p>

<div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><br>
<br>
-----Original Message-----<br>
From: <a href="mailto:erlang-questions-bounces@erlang.org">erlang-questions-bounces@erlang.org</a><br>
[mailto:<a href="mailto:erlang-questions-bounces@erlang.org">erlang-questions-bounces@erlang.org</a>]
On Behalf Of Vlad Dumitrescu<br>
Sent: 05 December 2008 12:12 PM<br>
To: erlang-questions<br>
Subject: [erlang-questions] string:substr/2 gives confusing error message<br>
<br>
Hi!<br>
<br>
Calling string:substr/2 with erroneous arguments gives a<br>
non-informative error message<br>
<br>
(w@EV001B784AC0A2)1> string:substr([], 2).<br>
** exception error: no function clause matching string:substr2([],2)<br>
<br>
Shouldn't it be badarg instead, or something similar?<br>
<br>
Also, the strings module documentation doesn't mention what are the<br>
cases when the function will fail. (A quick glance shows that there<br>
are other functions in the same situation).<br>
<br>
best regards,<br>
Vlad<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions"
target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions"
target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><o:p></o:p></span></font></p>

</div>

</div>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>

</div>

</body>

</html>