1

これは総和関数です。基本的には関数を受け取り、それを任意のものから任意のものに合計aしますb

コード:

object sum {
  def sum(f: Double => Double, lower: Int, upper: Int): Double = {
    @tailrec
    def iter(acc: Double, lower: Int): Double = {
      if (lower > upper) acc
      else iter(acc + f(lower), lower + 1)
    }
    iter(0, lower)
  }

これはどの程度スレッドセーフですか?
そうでない場合、誰かがそうする方法についての情報を提供できますか?

4

1 に答える 1

3

参照が透過的である限りf、つまり、副作用がない限り、完全にスレッド セーフです。

編集

このようなコードや条件付きループで尋ねるべき本当の質問は、「常に終了条件に到達できるか?」ということです。から生成されるシーケンスは、f(lower) + accを満たすことが保証されlower > upperますか? たとえば、 an に対して単調に増加する関数を提供した場合、upperこれはlower決して終了しません。ループは無限になります。

于 2013-11-05T16:08:12.190 に答える