The lack of loops is really the same as the matter of no side effects. Since one pass through a loop cannot have variables with different values than another pass , there is nothing to distinguish them; and the need to branch is usually in order to do a different program activity. Since functional programming doesn't have activities , but only , definitions , why bother branching