Elmでフィボナッチ数列を計算してみた
こんにちは、shootaceanです。
Elmで何かをつくりたくなったので フィボナッチ数列を生成するWEBアプリ をつくってみました。
こちらのサイトにホスティングしているので、ぜひ試してください! https://web-labs.shootacean.com/elm/fibonacci/index.html
ソースコードはGitHubで確認できます! https://github.com/shootacean/shootacean.com/blob/main/web-labs.shootacean.com/src/elm/fibonacci/src/Main.elm
バグってるよ、もっと簡単に書けるよ、などの指摘や意見があればTwitterのDMやメンションなどでお願いします!
フィボナッチ数列を計算する関数
他のプログラミング言語でもよくあるメモ化している実装です。
fibonacci : Int -> List Int -> Int fibonacci n memo = let m = List.getAt n memo in case m of Just memoNum -> memoNum Nothing -> case n of 0 -> 0 1 -> 1 _ -> ( fibonacci (n - 2) memo ) + ( fibonacci (n - 1) memo )
update処理
メモ化とViewに表示するためのリストを更新しています。
update : Msg -> Model -> (Model, Cmd Msg) update msg model = case msg of Increment -> let n = model.num + 1 fib = fibonacci n model.sequences in ( { model | num = n, sequences = List.append model.sequences [fib] } , Cmd.none )
メモ化なので永続的な状態を保つ必要があるのですが、他のプログラミング言語と違ってElmはTEAに縛られています。
まだElmとTEAの理解ができていなかったので、メモ部分をどうやって持つかで1時間くらい悩んでしまいました…
TEAに従って updateで計算して model を更新する ことしかできないので、 ただいつもどおりTEA様に従うだけでよかったです。
おわりに
個人的にElmを書いていて一番嬉しいのは、HTMLとJavaScriptを行き来しないでよくなることですね。 本当にのんびりとElmを学習しているのでまだまだわからないことばかりですが、ゆったりとElm書いていこうと思います!