rusbaron
@rusbaron
Не стыдно не знать, стыдно не интересоваться

Как правильно написать foldr и foldl на go?

В задании на экзЕрцизме нужно было реализовать функции свёртки. В описании задания было написано о функциональном программировании, после чего у меня возникли сомнения в правильности моего решения. Ну т.е. моё решение тесты проходят, но я это делаю циклом. Есть ли какой-то более правильный - функциональный способ решения этой задачи?
// Fold list from the right
func (l *IntList) Foldr(fn binFunc, init int) (answer int) {
    answer = init
    for i := l.Length() - 1; i >= 0; i— {
        answer = fn((*l)[i], answer)
    }
    return
}
// Fold list from the left
func (l *IntList) Foldl(fn binFunc, init int) (answer int) {
    answer = init
    for i := 0; i < l.Length(); i++ {
        answer = fn(answer, (*l)[i])
    }
    return
}


P.S. - Ещё только начал читать книгу Learning Functional Programming in Go
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы