varmemo=[0,1];functionfib(n){if(memo.length-1<n){memo[n]=fib(n-1)+fib(n-2);}returnmemo[n];}// creates array with elements from function that takes the index as argument while a given condition holdsfunctiontakeWhile(fromFunc,cond,arr=[]){varn=arr.length;varval=fromFunc(n);if(cond(val)){arr.push(val);returntakeWhile(fromFunc,cond,arr);}returnarr;}varsum=takeWhile(fib,n=>n<4000000).filter(n=>n%2==0).reduce((acc,c)=>acc+c,0);console.log(sum);
In Javascript using filter and reduce.
Haskell: