[erlang-questions] erlang improvement - objective c (or smalltalk) syntax
Tony Rogvall
tony@REDACTED
Fri Jun 5 11:50:41 CEST 2009
I like the idea.
just think about the way you handle variant functions:
format(value:V) ->
format(value:V precision:0 width:0 pad:$\s).
format(value:V width:W) ->
format(value:V precision:0 width:W pad:$\s).
format(value:V precision:P) ->
format(value:V precision:P width:0 pad:$\s).
...
format(value:V precision:P width:W pad:C) ->
format_v(value:V precision:P width:W pad:C).
The API designer still has to specify several cases but the user can
use the variants more freely.
format(value:"Hello" width:12)
format(value:3.13 precision:2)
format(value:16#4562 width:8 pad:$0)
To simplify the API designers work a syntax for default values could
be designed.
(Without thinking much about syntax! or the gory cases ;-)
format(value:V precision:P=0 width:W=0 pad:C=$\s) ->
format_v(value:V precision:P width:W pad:C).
The translator must in this case generate all versions of format (note
the argument name sorting)
format_value(V) -> format_pad_precision_value_width($\s,0,V,0).
format_precision_value(V,P) -> format_pad_precision_value_width($
\s,P,V,0).
format_width_value(V,W) -> format_pad_precision_value_width($\s,0,V,W).
... etc
To make this change and preserve backwards compatibility then old
functions must be mapped to the
new or vice versa (depending on situation)
keysearch(Key,Index,List) -> keysearch(key:Key index:Index list:List).
OR
keysearch(key:Key index:Index list:List) -> keysearch(Key,Index,List).
The new keysearch will probably be called something like
keysearch_key_index_list/3
On my which list is also some kind of syntax (sugar) to change some
arguments in "recursive" functions
without having to specify every one again:
my_func(X1, X2, X3, X4, X5, X6, X7, X8) ->
case X1 of
1 -> my_func(X1-1, X2, X3, X4, X5, X6, X7, X8);
2 -> my_func(X1, X2-1, X3, X4, X5, X6, X7, X8);
3 -> my_func(X1, X2, X3-3, X4, X5, X6, X7, X8);
...
end.
Someway of grouping the arguments ?
my_func(As=#(x1=X1 x2=X2 x3=X3, x4=X4, x5=X5,x6=X6,x7=X7,x8=X8)) ->
case X1 of
1 -> my_func(As# {x1=X1-1});
2 -> my_func(As# {x2=X2-1});
3 -> my_func(As# {x3=X3-1})
..
end.
A record like syntax? other suggestions? Maybe even anonymous
arguments as a group.
/Tony
On 5 jun 2009, at 10.09, Vlad Dumitrescu wrote:
> On Fri, Jun 5, 2009 at 09:46, Bengt Kleberg <bengt.kleberg@REDACTED
> > wrote:
>> The drawback with
>> string:substring_string_start_length(S, X, J)
>> is that you might still have made a mistake. If/When
>> string:substring(string:S, start:X, length:J)
>> is introduced the compiler will put things in the correct position.
>
> Yes, but you can still write "start:J, length:X" and make a mistake
> :-) Nothing is completely error-proof.
>
>> It could also make sure that the function (ought to) exist, at
>> least for
>> OTP functions. That would be nice.
>> The number of times I have written
>> lists:length/1 is embarrassing.
>
> Yeah, me too :-)
>
> This is a different can of worms. There is no reason the compiler
> couldn't check if lists:length exist now either, if it wanted to. But
> then we couldn't compile each erl file separately, only the whole
> system together.
>
> dialyzer can check if the target of a call exists.
>
> regards,
> Vlad
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>
More information about the erlang-questions
mailing list