स्कैला सीखने के अपने निरंतर प्रयास में, मैं ओडर्स्की द्वारा 'स्कैला उदाहरण के माध्यम से' और प्रथम श्रेणी के कार्यों के अध्याय पर काम कर रहा हूं, अज्ञात फ़ंक्शन पर अनुभाग रिकर्सिव अनाम फ़ंक्शन की स्थिति से बचाता है। मेरे पास एक समाधान है जो काम करता प्रतीत होता है। अगर वहां कोई बेहतर जवाब है तो मैं उत्सुक हूं।मैं रिकर्सिव अनाम फ़ंक्शन कैसे लिखूं?
पीडीएफ से: कोड उच्च आदेश कार्यों
def sum(f: Int => Int, a: Int, b: Int): Int =
if (a > b) 0 else f(a) + sum(f, a + 1, b)
def id(x: Int): Int = x
def square(x: Int): Int = x * x
def powerOfTwo(x: Int): Int = if (x == 0) 1 else 2 * powerOfTwo(x-1)
def sumInts(a: Int, b: Int): Int = sum(id, a, b)
def sumSquares(a: Int, b: Int): Int = sum(square, a, b)
def sumPowersOfTwo(a: Int, b: Int): Int = sum(powerOfTwo, a, b)
scala> sumPowersOfTwo(2,3)
res0: Int = 12
पीडीएफ से
प्रदर्शन करने के लिए:
def sumPowersOfTwo(a: Int, b: Int): Int = sum((x: Int) => {
def f(y:Int):Int = if (y==0) 1 else 2 * f(y-1); f(x) }, a, b)
scala> sumPowersOfTwo(2,3)
res0: Int = 12
क्या आप इसके बारे में निश्चित हैं? 'echo "2^2 + 3^2" | बीसी -एल' -> '13'। – sarnold
यह एक डुप्लिकेट है http://stackoverflow.com/questions/5337464/anonymous-recursive-function-in-scala – Suroot
@ दो की शक्तियों के कर्नाल्ड योग - यानी '2^ए + 2^ए + 1 + ... 2^बी -1 + 2^बी' '2^2 + 2^3 = 4 + 8 = 12' –