2017-01-06 10 views
4

Elm構文ページのフィボナッチコードは次のとおりです。ちょうど興味がありますか?再帰はメモを取る必要がありますか?または怠惰な評価はそれを世話しますか? (Pythonなど)他の言語でこのElm Fibonacciの例をメモする必要はありますか?

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

f(10) 4000等倍又はいろいろ書いを計算するならば、関数呼び出しの数は、その結果にnに指数関数的に成長します。

+4

「怠惰な評価はそれを世話しますか?」 - エルムは怠惰な評価を持っていません – robertjlooby

答えて

5

(エルム0.18のように)、あなたはエルムのコードは次のJavaScriptコードにダウンtranspiledされることを確認できますコンパイルされたソースを表示(変数名は異なる場合があります)。

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が関数呼び出しは、決定論的であることが保証されていないので、何の自動メモ化しません。メモ帳が必要な場合は、自分でロールバックする必要があります。

+0

ああ!ありがとうございました!いつものようにElmはJavaScriptにマップされています。この最適化のどれも他の言語にはありません。 –

関連する問題