LoginSignup
0
0

More than 3 years have passed since last update.

ReasonMLのListでは、Maximum call stack size exceededに気を付けよう

Posted at

現象

ReasonMLにて、List.mapの使用中に

Maximum call stack size exceeded

が発生しました。

再帰呼び出しでおなじみのエラーです。

原因

僕が書いていたコードに、無限再帰が発生するようなコードが無かったため、

List.mapの中身を疑ったところ、内部で再帰呼び出しをしていました

ちなみにこちらが、List.mapの中身です。

function map(f, param) {
  if (param) {
    var r = Curry._1(f, param[0]);
    return /* :: */[
            r,
            map(f, param[1])
          ];
  } else {
    return /* [] */0;
  }
}

明らかに、f()が再帰になっています。

つまり、大量の要素数のListを扱う場面では、エラーが発生します。

解決

Arrayを使うしかないと思われます。

ArrayはJavaScriptの配列なので、問題なく利用できます。

forもつかえますが、Listだとインデックスによるランダムアクセスが遅いので、使わない方が良いです。

おわり

ということで、

ReasonMLのListには気をつけよう

という話でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0