Наблюдая за SICP курс https://www.youtube.com/watch?v=erHp3r6PbJk&index=3&list=PLB63C06FAF154F047 Я преобразовал некоторые из LISP кода Scala:Как вызвать функцию, которая принимает параметры функции?
def sumInt(a: Int, b: Int): Int = { //> sumInt: (a: Int, b: Int)Int
if(a > b) 0
else a + sumInt(1 + a, b)
}
sumInt(3, 5) //> res0: Int = 12
def sumSquares(a: Int, b: Int): Int = { //> sumSquares: (a: Int, b: Int)Int
if(a > b) 0
else (a * a) + sumSquares(1 + a, b)
}
sumSquares(2, 3) //> res1: Int = 13
Чтобы сделать более общую функцию, которая принимает функции в качестве параметров для вычисления квадратов вместо кодирования их в пределах функции I» ve добавлено:
def sum(term: Int => Int, a: Int, next: Int => Int, b: Int): Int = {
if(a > b) 0
else {
val toAdd1 = term(a)
val toAdd2 = toAdd1 + sum(term, next(a), next, b)
toAdd1 + toAdd2
}
}
Но я не уверен, как вызвать эту функцию? Может ли это быть более общим, так что параметры a & b не обязательно должны быть типа Int
?
Я полагаю, что строка 'val toAdd2 = toAdd1 + ...' должна быть 'val toAdd2 = ...'. – marc