[eeps] EEP 31

Patrik Nyblom <>
Fri Dec 11 07:47:04 CET 2009


Hi Fredrik and all readers of the eeps list!

Adding guards is generally a "bigger step" than adding stdlib modules, but 
you definitely have a point.

Actually I'm more for allowing matching in guards, eliminating the need 
for special guard bif's doing the job a simple match could do. The 
variable scope is of course a problem (not as easilly solved as one might 
think), and the idea has been discussed on erlang-questions. That is far 
beyond the scope of this EEP though.

Also guards in other modules than erlang is new to the language, maybe 
erlang:binary_part (or auto-imported as binary_part) could be added, but 
adding autoimports will not be done between releases (and not until we'we 
straighted out the rules for shadowing autoimports with local functions). 
I'll add the suggestion to the EEP, but the initial implementation might 
lack the guard bif.

The diff funtion is nice! I preferr the simple variant which returns the 
length of the prefix. The tuple is so easilly built if you have the length 
(=> the index). I suppose the list of binaries should be of variable 
length too, why a tuple is not an ideal return value. I'll add 
longest_common_{prefix/suffix} to the EEP. (I think those names are good, 
although a little long - the functionality is not too common though, so a 
longer name might be acceptable).

To summarize:
- I'll add a suggestion about allowing part/3 in guards (possibly with a 
different name)
- I'll add longest_common_prefix/1 -> int() and longest_common_suffix/1 -> 
int() (both returning the *length* of the prefix/suffix).

Cheers,
/Patrik

On Thu, 10 Dec 2009, Fredrik Svahn wrote:

> Hi,
>
> Is there any chance of allowing part/[2,3] to be used as a guard? For tuples
> there is already element/2. Something like the following would be very
> useful:
>
> my_func(Pos, Bin, Pattern) when binary:part(Bin, Pos, size(Pattern)) ==
> Pattern ->
>    ...
>
> Another nice to have would be a diff function returning either the first
> position where a list of binaries differ, or a tuple with the common
> beginning and the differing ends of the binaries, e.g.
>
> binary:diff([<<"abcde">>, <<"abcdghie">>]) -> 4, or
> binary:diff([<<"abcde">>, <<"abcdghie">>]) -> {<<"abcd">>, <<"e">>,
> <<"ghie">>}
>
> The name diff might be somewhat misleading, maybe
> longest_common_prefix/suffix is more descriptive (borrowed from Joe
> Armstrongs elib_misc)?
>
> BR /Fredrik
>
>
>
>
> On Thu, Nov 26, 2009 at 3:25 PM, Patrik Nyblom <> wrote:
>
>> A new EEP is submitted.
>>
>> EEP 31 is a slight rework of a part of EEP 9.
>>
>> Comments on this EEP are accepted until 10-Dec-2009. Please send all
>> comments and suggestions to this mailing list ().
>>
>> Best regards,
>>
>> /The OTP team/Patrik
>>
>> ________________________________________________________________
>> eeps mailing list. See http://www.erlang.org/faq.html
>> eeps (at) erlang.org
>>
>>
>


More information about the eeps mailing list