2017-12-18 17 views
-2

私はscalaを初めて使っていますが、1つの数値が定数で2つの数値を入力する部分関数を定義したい場合があります。 数値を入力として渡し、部分を取る別の方法を定義します。 入力として機能し、キューブを結果として与える。パーシャル関数の入力として定数整数を取る方法は?

+2

ので、この関数は、部分的なことでなければならない理由は?そしてそれを実装することであなたの問題は何ですか?それは簡単だね。 – SergGr

+0

@SergGr私はスカラの初心者であり、上記の操作を行う必要があるユースケースの1つを理解するのが難しく、別の関数への入力としてその部分関数を取り、そのキューブを見つけようとしています –

+0

私の最高の推測は、2つの異なる用語を組み合わせることです: "_partial function_" - 正の値に対してのみ定義された平方根のようなすべてのパラメータで定義されていない関数を意味します。 「部分的に適用されたfunction_」は、多くのパラメータの機能を持っていて、いくつかをバインドしてより少ないパラメータで機能させることを意味します。 – SergGr

答えて

1

以下の部分関数はこのプログラムで、タプルの要素に任意の数の追加部分関数を定義することによって、概念を拡張

scala> val addConstantTo: PartialFunction[(Int, Int), Int] = { 
    | case (a, b) => a + b + 12345 
    | } 
addConstantTo: PartialFunction[(Int, Int),Int] = <function1> 

scala> addConstantTo((12, 34)) 
res4: Int = 12391 

に渡されるタプルの各番号に12345を追加します

ビットのためにあるシンク
scala> def addTo(c: Int): PartialFunction[(Int, Int), Int] = { 
    | case (a, b) => a + b + c 
    | } 
addTo: (c: Int)PartialFunction[(Int, Int),Int] 

scala> val pf = addTo(3) 
pf: PartialFunction[(Int, Int),Int] = <function1> 

scala> pf((1, 2)) 
res5: Int = 6 

みましょう:)

+2

ええ、しかし、これが定義されていない '(Int、Int)'ドメインがないので、それを 'PartialFunction'にするのはちょっと意味がありません。私は、OPが宿題を読んだり理解しなかったり、実際には探しているものが部分的に適用された機能(すなわち、カレー)であるかどうか疑問に思います。 – jwvh

+1

OPの動機づけは何であるか分かりませんが、私のビジネスはありません。 'PartialFunction'は'(A)⇒B'を拡張しているので、少なくとも部分的にはOOの観点からは、完全な関数になります。 http://www.scala-lang.org/api/current/scala/PartialFunction.htmlを参照してください。 'PartialFunction'がどこにも定義されていないという要件はありません。 –

2

うーん...あなたの定数がどこから来ているに依存しますか?

選択肢1 - あなたの関数は、スコープ内に定数が存在するクロージャを形成します。

val yourConstant = 10 

val pf: PartialFunction[(Int, Int), Int] = { 
    case (x, y) => x + y + yourConstant 
} 

pf((5, 10)) 

選択肢2 - 関数にローカル定数があります。

val pf: PartialFunction[(Int, Int), Int] = { 
    case (x, y) => x + y + 10 
} 

pf((5, 10)) 

また、多くの人が指摘しているように、これは部分的機能の使用例のようには見えません。 Partial Functionを入力し、partially applied functionを入力しないことを確認してください。

あなたはその後、部分的に適用される関数を探していた場合、

// first you need a curried function 
// Curries function are function which can take parameters in steps to build intermidatary functions. 

def normalDef(c: Int)(x: Int, y: Int): Int = c + y + x 
// normalDef: normalDef[](val c: Int)(val x: Int,val y: Int) => Int 

// now you can "partially apply" this "curried" function to your partially applied function 

val addTo10PartiallyApplied = normalDef(10) _ 
// addTo10PartiallyApplied: (Int, Int) => Int = $Lambda$1240/[email protected] 

val total = addTo10PartiallyApplied(1, 2) 
// total: Int = 13 
関連する問題