The thing to understand in a program like the one above is that i and j are not assigned
values, but are rather defined in the manners given. In fact, even in the above, i and j
are functions, and the examples above are of function definitions. In many imperative
programming languages, you are also not allowed to define functions multiple times (at
least in the same scope).