Jest sobie taki kod https://pastebin.com/yRMr6fBU (z 5 rozdziału Eloquent JavaScript), a tutaj array (w przykładzie jest przekonwertowany z JSONa pod zmienną ancestry)
I nie za bardzo ogarniam co jest zwracane tutaj
function sharedDNA(person, fromMother, fromFather) { if (person.name == "Pauwels van Haverbeke") return 1; else return (fromMother + fromFather) / 2; }
To dalej leci do valueFor, i tam jest pobierana matka i ojciec. Tylko, że matka i ojciec to imię i nazwisko, więc nie rozumiem co tu jest dodawane i dzielone. Co zwraca ten return?
@PolaroidalnY: Ten return zwraca 1 lub średnią jaką matka i ojciec obiektu person dzielą z panem Puawelsem ;)
reduceAncestors przy pomocy valueFor, dzięki rekurencji tworzy drzewo wywołań funkcji sharedDNA (dla każdej osoby spokrewnionej z osobą z wywołania valueFor(person) w reduceAncestors. Czyli:
sharedDNA(byName["Philibert Haverbeke"], sharedDNA(byName["Emma de Milliano"]....
Przy wykonywaniu ("zwijaniu drzewa") tych wywołań sharedDNA przekazuje "sam sobie" albo 1 albo tę średnią z poprzednich wywołań.
@kmiasko: Tylko byName[person.mother] to string. Więc jaki wynik jest zwracany po dodaniu stringów? Jesteś w stanie wytłumaczyć to łopatologicznie? Bo to chyba leci tak (nie zwracaj uwagi na klamry itp. bo pogubiłem kopiując)
sharedDNA(person, valueFor("Emma de Milliano") { if (person == null)
@PolaroidalnY: Przede wszystkim byName[person.mother] zwraca obiekt, nie string. Po drugie najpierw tworzysz drzewo wywołań od góry w dół, następnie "zwijasz" je wywołując te funkcje. sharedDNA w parametrach fromMother i fromFather będzie miało wynik "niższych" wywołań sharedDNA itd. Spróbuj to sobie rozrysować.
I nie za bardzo ogarniam co jest zwracane tutaj
function sharedDNA(person, fromMother, fromFather) {
if (person.name == "Pauwels van Haverbeke")
return 1;
else
return (fromMother + fromFather) / 2;
}
To dalej leci do valueFor, i tam jest pobierana matka i ojciec. Tylko, że matka i ojciec to imię i nazwisko, więc nie rozumiem co tu jest dodawane i dzielone. Co zwraca ten return?
http://eloquentjavascript.net/05_higher_order.html w "Great-great-great-great-..."
#naukaprogramowania #javascript #eloquentjavascript
reduceAncestors przy pomocy valueFor, dzięki rekurencji tworzy drzewo wywołań funkcji sharedDNA (dla każdej osoby spokrewnionej z osobą z wywołania valueFor(person) w reduceAncestors. Czyli:
sharedDNA(byName["Philibert Haverbeke"], sharedDNA(byName["Emma de Milliano"]....
Przy wykonywaniu ("zwijaniu drzewa") tych wywołań sharedDNA przekazuje "sam sobie" albo 1 albo tę średnią z poprzednich wywołań.
Bo to chyba leci tak (nie zwracaj uwagi na klamry itp. bo pogubiłem kopiując)
sharedDNA(person, valueFor("Emma de Milliano") {
if (person == null)
Po drugie najpierw tworzysz drzewo wywołań od góry w dół, następnie "zwijasz" je wywołując te funkcje. sharedDNA w parametrach fromMother i fromFather będzie miało wynik "niższych" wywołań sharedDNA itd. Spróbuj to sobie rozrysować.
https://blog.jayway.com/2011/03/20/the-substitution-model-a-tool-for-understanding-recursion/