2013-09-22 3 views
0

Erlang apprentissage `m et faire des exercices du livre:exercice Erlang, la création de listes

« Écrivez une fonction qui retourne une liste du format [1,2, .., N-1, N]. create (3) -> [1,2,3]. "

J'ai une solution, ce qui est:

create(N) -> create(1, N). 
create (M,M) -> [M]; 
create(M,N) -> [M | create(M+1, N)]. 

Je l'ai parcouru douzaine de fois, mais je ne peux pas simplement comprendre ce qui se passe sur la ligne 2 de la solution. Est-ce que quelqu'un peut expliquer s'il vous plaît? Merci.

EDIT. Ok, donc je pense que je suis sur la bonne voie pour le comprendre. Dans la ligne 2, la nouvelle liste est créée où essentiellement 1 ira à la tête et N à la queue? Si oui, alors sur la ligne 3 M représente la nouvelle liste que nous avons créée sur la ligne 2, et N représente l'entier en entrée de la ligne 1? Merci encore.

Répondre

1

La ligne 2 de la solution est simplement le cas de base d'une fonction récursive. Create (3, 3) Si les deux nombres sont les mêmes, la fonction récursive sera renvoyée par la fonction récursive et la liste sera créée.

create (3) -> créer (1, 3) -> [1 | create (2, 3)] -> [2, | create (3, 3)] -> [3] -> [2 | [3]] -> [1 | [2, 3]] -> [1, 2, 3]

1
create (M,M) -> [M]; 

Cela signifie simplement créer une liste de M à M, qui n'a qu'un seul numéro, M.

Par exemple,

create (1,1) 

vous donnerait [1], parce que la liste commence à 1 et se termine à 1.