/* * Using the library ramda, what is the result of the following code? * R.reduce((acc,x) => R.compose(R.flip(R.prepend)(acc), R.sum,R.map(R.add(1)))([x,...acc]), [0])([13, 28]); * Explain each of the steps the best you can. */ const R = require('ramda'); // Reduce function iterating over [13, 28] // starting point: [0] const test = R.reduce( (acc, x) => { console.log(acc, x); // Compose - right to left function taking in [...acc, x] // (read everyting within compose from bottom to top) return R.compose( // 4. Prepend sum to accumulator array R.flip(R.prepend)(acc), // 3. sum of array R.sum, // 2. 1++ for each array item R.map(R.add(1)), // 1. Take in array of x and acc values )([...acc, x]); }, [0], )([13, 28]); console.log(test); // First iteration: accumulator is [0]. // Compose function takes in [0, 13] // 1++ for each item in array: [14, 1] // Sum is 15 // Prepend sum to accumulator array: [15, 0] // Second iteration: accumulator is [15, 0] // compose function takes in [0, 15, 28] // 1++ for each item in array: 1, 16, 29 // Sum of [1, 16, 29] is 46 // Prepend sum to accumulator: [46, 15, 0] // Does `flip` even flip anything?