What is a functional programming language? How is it different from imperative languages?