2017-01-06 2 views
4

Hier ist der Fibonacci-Code auf der Elm-Syntaxseite. Nur neugierig muss Rekursion gemerkt werden oder kümmert sich faule Auswertung darum?muss dieses Elm Fibonacci Beispiel notiert werden?

fib n = case n of 
    0 -> 1 
    1 -> 1 
    _ -> fib (n-1) + fib (n-2) 

In anderen Sprachen (wie zB Python) die Anzahl der Funktionsaufrufe in n so dass in exponentiell wachsen würde, wenn f(30)f(10) wie 4000 mal oder some berechnen würde.

+4

"tut faule Bewertung darauf achten" <- Elm hat keine faule Bewertung – robertjlooby

Antwort

5

die kompilierte Quelle Anzeigen (Stand Elm 0,18), werden Sie sehen, dass der Elm-Code zu den Javascript-Code folgenden transpiled nach unten wird (Die Variablennamen können sich unterscheiden).

var _user$project$Temp1483721371847322$fib = function (n) { 
    var _p0 = n; 
    switch (_p0) { 
     case 0: 
      return 1; 
     case 1: 
      return 1; 
     default: 
      return _user$project$Temp1483721371847322$fib(n - 1) + _user$project$Temp1483721371847322$fib(n - 2); 
    } 
}; 

Javascript hat keine automatische memoization seit Funktionsaufrufe sind nicht deterministisch sein garantiert. Wenn Sie eine Memoisierung benötigen, müssen Sie Ihre eigenen Rollen erstellen.

+0

ah! Danke! Wie üblich stellt Elm auf JavaScript um, was als keine dieser netten Optimierungen andere Sprachen haben. –