There is the Alan Perlis quote:
"A programming language that doesn't change the way you think is not worth learning"
Here are a list of languages that I think of as "Puzzle Languages" because they all force you into somewhat mind-bending new paradigms in order to use.
Of these above, Erlang and Scheme are the ones that I would use for general purpose programming.
Here are two others that at least allow interesting thoughts or patterns of use but are somewhat easier to use in that they allow a normal procedural approach: