Что выведет код Junior Лямбды, inline и reified обновлено

Функция, возвращающая функцию

Вопрос

Что выведет код? По строке на каждый вывод.

fun multiplier(k: Int): (Int) -> Int = { it * k }

fun main() {
    val double = multiplier(2)
    val triple = multiplier(3)
    println(double(5))
    println(triple(double(1)))
    val ops = listOf(double, triple, { x: Int -> x - 1 })
    println(ops.map { it(10) })
    println(ops.fold(1) { acc, f -> f(acc) })
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 10, 6, [20, 30, 9], 5. multiplier возвращает лямбду, которая запомнила k (замыкание). triple(double(1)) это 3 · 2 · 1 = 6.

Что выведет

10
6
[20, 30, 9]
5

Разбор

multiplier возвращает лямбду, которая запомнила k (замыкание). triple(double(1)) это 3 · 2 · 1 = 6. Список функций применяется к 10. fold прогоняет 1 через все функции по очереди: 1 · 2 = 2, 2 · 3 = 6, 6 - 1 = 5.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.