Creating a List in Erlang

From "Erlang Programming" by Cesarini 3-2 Exercises

When I look at Erlang Programming, I get problems creating strange lists. From Exercise 3-2, I wrote two similar functions.

create( 0 ) -> [];
create( N ) when N > 0 -> [ N | create( N-1 ) ].

reverse_create( 0 ) -> [];
reverse_create( N ) when N > 0 -> [ reverse_create( N-1 ) | N ].

so create (3) is generated as i expected.

exercise3: create (3).
[3,2,1]

but reverse_create does not generate the list that I expect.

exercise3: reverse_create (3)
. [[[[] | 1] | 2] | 3]

What do I need to change for reverse_create (3) to return [1,2,3]? Thanks for the explanation.

+5
source share
5 answers

reverse_create , head, , . :

reverse_create( 0 ) -> [];
reverse_create( N ) when N > 0 -> reverse_create( N-1 ) ++ [N].

EDIT: :

reverse_create2(N) -> reverse_create_helper(N, []).

reverse_create_helper(0, Acc) ->
    Acc;
reverse_create_helper(N, Acc) ->
    reverse_create_helper(N-1, [N|Acc]).
+5

, reverse_create, .

reverse_create(N) ->
    reverse_create(N, []).

reverse_create(0, Acc) ->
    Acc;
reverse_create(N, Acc) when N > 0 ->
    reverse_create(N - 1, [N | Acc]).
+3

, :

reverse_create(N) -> lists:reverse(create(N)).

. .:)

+2

, , , ...

create(0) -> [];
create(N) when N > 0 -> create(N-1) ++ [N].

reverse_create(0) -> [];
reverse_create(N) when N > 0 -> [N|create(N-1)].
+1



    reverse_create(0) -> [];
    reverse_create(N) ->
        list_create_1(1, N, []).

    list_create_1(I, N, List) when N >= I ->
        list_create_1(I + 1, N, [I | List]);
    list_create_1(_, _, List) -> List.


-1

All Articles