Итак, прелесть Функционального программирования в том, что мы можем рассуждать или программировать как выражения.
Дано:
def k(x: Int) = x * x // 1.
def y(h: Int => Int) = h(5) // 2.
Тогда:
y(k) = k(5) // By definition of y (2).
y(k) = 5 * 5 // By definition of k (1).
y(k) = 25 // By definition of multiplication.
Здесь я сделал несколько упрощений. как будто я не проверял тип, но это должно быть довольно просто.