[erlang-questions] How can I make a list of this

Richard A. O'Keefe ok@REDACTED
Wed Aug 19 04:57:26 CEST 2015


On 19/08/2015, at 6:13 am, Roelof Wobben <r.wobben@REDACTED> wrote:

> Hello,
> 
> Im still trying to solve exercise 2 of chapter 8 of Programming erlang.
> 
> Now I succeed in finding all functions that are exported by a module.
> 
> I see now this output :
> 
> [{get_rc,0}, {close,1}, {peername,1}, {setpeername,2}, {peernames,...}, {...}|...], [{module,2},{module_info,0},{module_info,1}], [{new,0},{is_set,1},{size,...},{...}|...], [{server,3},{interfaces,...},{...}|...], [{init_it,...},{...}|...], [{...}|...], [...]|...]
> 
> So I have list which are containing more list which contains one of more tuples
> 
> Is it possible to convert this to for example [get_rc/0, peername/1, peernames/? , module/2 ]

There is no get_rc/0 data structure.
When you have F/N in a declaration, it is converted to {F,N}.
[{get_rc,0}, {peername,1}, ...] is as close as you are going to get.

> I need the nice output because I have to sort them and then count them.

No you don't.
You can sort a list of tuples.
1> lists:sort([{c,3},{a,2},{b,4},{a,1},{c,2}]).
[{a,1},{a,2},{b,4},{c,2},{c,3}]

Given a sorted list,

sorted_list_unique_count(L) ->
   sorted_list_unique_count(L, 0).

sorted_list_unique_count([X|Xs=[X|_]], N) -> % duplicate
    sorted_list_unique_count(Xs, N);
sorted_list_unique_count([_|Xs], N) ->       % non-duplicate
    sorted_list_unique_count(Xs, N+1);
sorted_list_unique_count([], N) ->
    N.

You can print such a list prettily if you want:

format_functor_list(Fs) ->
    format_functor_list(Fs, "").

format_functor_list([{F,N}|Fs], Sep) ->
    io:format("~s~w/~w", [Sep, F,N]),
    format_functor_list(Fs, ", ");
format_functor_list([], _) ->
    ok.






More information about the erlang-questions mailing list