0

このコードで使用されているメソッド製品はどのようになっていますか?

この関数の結果は3600です。

したがって、productは関数を取ります:f、fはIntパラメーターを返すIntパラメーターを取ります。

しかし、(a:Int、b:Int)は、2つのIntパラメーターを受け取る関数が返されることを示していませんか?

この行で何が起こっているのか混乱しています:f(a)* product(f)(a + 1、b)

完全な機能:

 def product(f: Int => Int)(a: Int, b: Int): Int =
    if(a > b) 1
    else {
     f(a) * product(f)(a + 1, b)
    }                                        
  product(x => x * x)(3 , 5)  
4

1 に答える 1

4

Scalaでは、メソッドは複数のパラメーターリストを持つことができます。この例では、メソッドproductには2つのパラメーターリストがあります:(f: Int => Int)(a: Int, b: Int)

最初のパラメーターリストにfは、タイプInt => Int(を受け取り、Intを返す関数Int)のという名前のパラメーターが1つ含まれています。

2番目のパラメーターリストには、タイプが両方ともであるaという名前の2つのパラメーターが含まれています。bInt

product(f)(a + 1, b)product(x => x * x)(3 , 5)は、3つのパラメーターすべてを使用してメソッドを呼び出すだけです。

productこれの利点は、最初のパラメータリストだけで「呼び出す」ことができることです。次に取得するのは、2番目のパラメーターリストを指定することで呼び出すことができる関数です。例えば:

val fn = product(x => x * x)  // only the first parameter list is applied
fn(3, 5)                 // fn is a function which you can pass the second list

product最初のパラメータリストのみを使用した「呼び出し」は、カリー化と呼ばれます。

于 2012-10-25T10:03:09.180 に答える