4.1. Minimalistic function: Functional programmers sometimes tend to write code in a minimalistic way. Can you examine the following version of the Fibonacci function and explain whether it works, and if so, how?
const fib2 = n => (n < 2 ? n : fib2(n - 2) + fib2(n - 1));
4.2. A cheap way: The following version of the Fibonacci function is quite efficient and doesn't do any unnecessary or repeated computations. Can you see how? Here's a suggestion: try to calculate fib4(6) by hand and compare it with the example given earlier in the book:
const fib4 = (n, a = 0, b = 1) => (n === 0 ? a : fib4(n - 1, b, a + b));
4.3. A shuffle test: How would you write unit tests for shuffle() to test whether it works correctly with arrays with repeated values?
4.4. Breaking laws: Using toBeCloseTo() is very practical, but it can cause some...