> I would like to ask about what are tha main features
> of functional programming?
Caveat: I'm a relative newcomer to functional programming myself,
certainly not an expert.
There's the obvious definition: Functional programming is writing
programs in the form of functions that are evaluated, as opposed to
procedures that are evaluated. but even if it's tecnically correct,
I'm not that such a distinction helps very much. I know it uses Scheme
(a variety of Lisp) rather than Haskell, but ch. 3 of "The Structure
and Interpretation of Programming Languages" (SICP) has a nice
treatment of mutable data structures on the one hand, and delayed
evaluation on the other. It's interesting because it gives some insight
into the complementary nature of the approach taken by pure languages
like Haskell (called streams in SICP), and non-functional techniques
such as assignment.
I like to think of this as a kind of time/space duality. If you think
about the sequence of "events" during a computation, then you are
squarely on the side of time, and your computational model is decidely
imperative. If you're willing to let go a bit of time, and instead
start thinking about comprehensions and (potentially) infinite lists,
then you've moved over into the space camp, and your programming style
becomes more functional.