/ / स्केल में सरल करी - स्केल, करीना

स्कैला में सरल करी - स्केल, करीना

स्केल में लिखे गए निम्नलिखित दो कार्य हैं:

def f: (Int,Int) => Int = (x,y) => x+y
def g: Int=>Int=>Int=x=>y=>x+y

अब मैं एक फ़ंक्शन लिखना चाहता हूं जो फ़ंक्शन f को दबाता है, एक तर्क लेता है, फ़ंक्शन जी में दो तर्क लेता है।

परिभाषा के अलावा मुझे इस समस्या का समाधान नहीं मिल रहा है

curry: ((Int, Int) => Int) => (Int => Int => Int):

कोई सुझाव?

उत्तर:

उत्तर № 1 के लिए 1
scala> def f(x: Int, y: Int) = x + y
f: (x: Int, y: Int)Int

scala> def curry(fn: (Int, Int) => Int) = (x: Int) => (y: Int) => fn(x, y)
curry: (fn: (Int, Int) => Int)Int => (Int => Int)

scala> val g = curry(f)
g: Int => (Int => Int) = <function1>

scala> g(3)(4)
res0: Int = 7

जवाब के लिए 3 № 2

क्या आप बस इसका उपयोग कर सकते हैं curried समारोह?

scala> def f: (Int,Int) => Int = (x,y) => x+y
f: (Int, Int) => Int

scala> val g = f.curried
g: Int => (Int => Int) = <function1>

scala> g(1)(2)
res0: Int = 3

संपादित करें: ए का एक उदाहरण curry स्रोत कोड के आधार पर कार्य curried में Function2:

def curry[A,B,C](f: (A,B) => C): A => B => C = (x1: A) => (x2: B) => f(x1,x2)