Помогите с задачкой(новичок я еще в этом) [как реализовать foldr?]

разделите итерацию массива и выполняемую операцию.
Напишите функцию, складывающую массив с любой заданной функцией
у меня ступор и не понимание условия и выполнения. Подскажите знающие люди

function fold(array, operation) {
// your code goes here
}
|function add(a, b) { return a + b }
|function mul(a, b) { return a * b }
|fold([1, 2, 3, 4], add) // add(add(add(1, 2), 3), 4) === 10
|fold([1, 2, 3, 4], mul) // 24

Даны функции

function add(a, b) { return a + b }
function mul(a, b) { return a * b }

И нужно написать такую fold, которая принимает массив и функцию вторым аргументом и вызывает эту функцию для первой пары значений, это результат1, потом берет результат1 и третье значение из массива вызывает функцию с ними, получает результат2 итд до конца массива. Это попытались записать в add(add(add(1, 2), 3), 4). Тебе нужно реализовать такие шаги, результат которых был бы как будто результат этих вызовов.

спасибо большое, но у меня появилось ощущение, что для этой задачи у меня явно не хватает знаний и опыта :) Но стоит попробовать

Пробовать обязательно потому что обучение как раз про то чтобы делать такое чего не знал как делать. И оно не будет получаться сначала. А потом со временем будет проще и проще.

Секрет в том чтобы разбивать задачу на такие шаги, которые ты можешь/знаешь как запрограммировать.

Например решение влоб:

  1. Попробуй для начала вывести через console.log первые два элемента массива, а потом по одному элементу до конца массива
  2. Замени console.log на вызов функции с запоминанем результата вызова. Там где логгируешь по одному элементу, вызывай функцию с элементом и результатом вызова + снова запоминай результат.
1 лайк

спасибо, буду разбираться

Чтобы легче понять “что от меня требуется” можно примеры решить самому и понять, какие операции должны быть выполнены для получения результата, “какие я проделал шаги, такие же должна выполнить программа”.

ход решения я примерно понял, но как записать это - вот с этим проблема, опыт в написании и синтаксиса на уровне плинтуса

что изучал, пробуй писать - подскажем если что. Какие есть мысли?

это понятно? Сам можешь математически это проделать?

получаем аргументом массив и функцию. Из массив циклом вытягиваем нулевое значение и вызываем функцию- результата пишем в переменную и так пока не будет строго равно 10. по аналогии подставляем другую функцию и перемножаем

С рекурсией знаком?

самовызывающеяся функция(слышал) но не использовал

Похоже, что это для нее задача

спасибо, пошел в google… изучать рекурсию

Рекурсия, стек

Все что делается с помощью рекурсии можно сделать с помощью цикла. Если нужно научиться программировать, то нужно научиться разбивать задачу на программируемые подзадачи. А как именно их реализовывать - с помощью рекурсии или цикла - это уже вопрос доступного набора инструментов.

у меня в дз это следующая задачка…

  1. Write the same fold function recursively.
    Do not simulate cycle via recursion.

ну вот что то нацарапал, дольше пока не совсем понимаю как правильно записать
function fold(array, operation) {
var sum = 0;
for (var i = 1; i < array.length; i++) {
sum+=array[i];
}
add(sum, array[i]);
return result
}

function add(a, b) {
return a + b
}

function mul(a, b) {
return a * b
}
fold([1, 2, 3, 4], add) // add(add(add(1, 2), 3), 4) === 10

// fold([1, 2, 3, 4], mul) // 24

Нужна переменная которая будет аккумулировать результаты вызова operation. С какими аргументами нужно вызвать operation первый раз?

так?

function fold(array, operation) {

var sum = 1;
for (var i = 1; i < array.length; i++) {
sum+=array[i];
}
var x = add(sum, array[i]);
return x

// your code goes here
}

function add(a, b) {
return a + b
}

function mul(a, b) {
return a * b
}

fold([1, 2, 3, 4], add) // add(add(add(1, 2), 3), 4) === 10

// fold([1, 2, 3, 4], mul) // 24