I recommend Haskell. Please check out these (online and print) book recommendations in another SO question.
Reasons in favor of Haskell:
- From a personal perspective first: I spent a considerable amount of my early programming years thinking about designing my own programming language. (For example, I highly recommend the textbook Programming Language Pragmatics.) When I first encountered Haskell, I realized that it incorporated many of the ideas I had, plus many more, and all in ways far better than I could have done myself.
- It's a very pure implementation of functional ideals: lazy (non-strict) and (polymorphically) statically typed. No side effects!
- Its type system might change your view of type systems. (Hindley-Milner type inference is amazing.)
- Its alternative view of object-oriented programming and polymorphism is great.
Lisp is also a good choice. Reasons in favor of a Lisp variant:
- Historically the first functional programming language (or the first huge one).
- The worldview "everything is a list" is very minimalist, simple, and beautiful.
If you do choose a Lisp variant, I recommend Scheme.
I have not used OCaml or Ruby, but some of my friends swear by them, though one could argue how functional they are. On the other hand, their "multi-paradigm" nature makes them very convenient in practice.
To conclude, I suggest you choose a language following Alan Perlis's advice: "A language that doesn't affect the way you think about programming, is not worth knowing." Lisp and Haskell both changed my world. I hope that no matter what language you choose, it changes your world.