Scala'yı öğrenme konusundaki çabalarım boyunca, Odersky tarafından 'örnekle Scala' üzerinden çalışıyorum ve birinci sınıf işlevler bölümünde, anonim işlevle ilgili bölüm, yinelemeli anonim işlevlerden kaçınıyor. Çalıştığım bir çözüm var. Orada daha iyi bir cevap varsa merak ediyorum. Code yüksek mertebeden fonksiyonlar pdf den Yinelemeli anonim işlevleri nasıl yazarım?
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
vitrin:
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
Bundan emin misiniz? echo "2^2 + 3^2" | bc -l' -> 13'. – sarnold
Bu bir kopya http://stackoverflow.com/questions/5337464/anonymous-recursive-function-in-scala – Suroot
@sarnold İki Güçlerin Toplamı - yani '2^a + 2^a + 1 + ... 2^b-1 + 2^b '2^2 + 2^3 = 4 + 8 = 12' –