Personally, I feel the &quot;recursion is the only way to iterate&quot; purity is practically harmful, even though it is quite elegant for theory.<p>K&#x2F;J&#x2F;Q&#x2F;APL2 and friends[0] have isolated iterative constructs that cover IME 98% of what&#x27;s needed (each, fold, scan, fixed point, ...) in a way that&#x27;s just as simple to analyze as recursion[1]. These languages do like DSLish for the first 10 or 20 examples you see - but by the 200th example, it is clear the domain it is specific to is &quot;mostly everything&quot;<p>[0] I&#x27;m not considering APL1 as part of the modern family - it had Fortran-style computed gotos for control flow.<p>[1] Although there&#x27;s about 10 times as many of them, so it&#x27;s not quite as elegant.