3

私は実際にscalaを学んでおり、末尾再帰について質問があります。scala で末尾再帰を使用した階乗の例を次に示します。

    def factorial(n: Int): Int = {

    @tailrec
    def loop(acc: Int, n: Int): Int = {
      if (n == 0) acc
      else loop(n * acc, n - 1)
    }
    loop(1, n)
  }              

私の質問は、パラメーターを更新するacc ことです。関数で行うようにloop、副作用と見なすことができますか? FP では、副作用のリスクを防止または軽減したいと考えています。

多分私はこれを誤解していますが、誰かが私にこの概念を説明してもらえますか?

ご協力いただきありがとうございます

4

1 に答える 1

7

You aren't actually changing the value of any parameter here (as they are vals by definition, you couldn't, even if you wanted to).

You are returning a new value, calculated from the arguments passed in (and only those). Which, as @om-nom-nom pointed out in his comment, is the definition of pure function.

于 2012-10-11T12:32:46.683 に答える