Je ne suivais pas le lien parce que je ne suis généralement pas des liens qui ne sont pas pour les sites Web couramment utilisés, mais est ici une explication de ce qui se passe:
t = [1, [3, [4], [5]], [2]]
Au niveau de la pile (0
) nous appel:
findPath(t, 5)
Cette évalue à:
findPath([1, [3, [4], [5]], [2]], 5)
Nous sta rt niveau de pile (0
) en vérifiant t[0]
. Nous allons le représenter avec la notation List (<stack level>
: <current index>
), ce qui nous donne ici (0: 0
).
À ce stade, t[0]
n'est pas égal à , donc nous passons par la condition else non spécifiée de l'instruction if et passons à l'itération suivante de la boucle for.Nous incrémente l'indice du niveau de la pile actuelle (0: 1
) et ajouter un autre niveau de la pile (1
), ce qui nous donne un état de (0: 1
, 1: 0
), où nous appelons:
findPath([3, [4], [5]], 5)
Encore une fois, t [0] est pas égal à x
, donc on incrémente l'indice du niveau de pile courant (0: 1
, 1: 1
) et ajouter un autre niveau de pile pour essayer (0: 1
, 1: 1
, 2: 0
), qui nous fait appeler:
findPath([4], 5)
ici t[0]
n'est pas égal à x
et t[1:]
est vide, donc nous redescendons le niveau de la pile pour empiler le niveau (1
) et reprenons là où nous nous étions arrêtés; nous incrémentons le compteur à ce niveau à (0: 1
, 1: 2
) puis ajoutons un niveau de pile, ce qui nous donne (0: 1
, 1: 2
, 2: 0
). Cela nous appelle: findPath ([5], 5)
Aha! Maintenant, t[0]
est égal à x
au niveau de pile le plus élevé, donc nous construisons [t[0]]
; cela évalue à [5]
. Ensuite, nous redescendons au niveau de la pile et reprenons là où nous nous étions arrêtés; nous étions à (0: 1
, 1: 2
). Maintenant, findPath a renvoyé une valeur de sorte que nous sommes dans la condition if pour la première fois au lieu de passer à l'itération suivante. Nous prenons donc t[0]
au niveau de la pile actuelle et y ajoutons la valeur de retour; ceci évalue à ajouter [5]
à [3]
, ce qui nous donne [3,5]
.
Ensuite, nous redescendons à (0: 1
) et répétons le processus; maintenant nous devons ajouter [3,5]
à [1]
, donc nous obtenons [1,3,5]
.
Est-ce que cela commence à avoir du sens? J'ai fait une notation bizarre ici parce que je ne veux pas passer du temps à dessiner des images, mais pour vraiment comprendre cela, vous devriez dessiner les niveaux de pile pour vous-même.