Difference between imperative and non-imperative programming languages?