One easy example is FP in low level, performance sensitive code. There are many algorithms where there is an FP implementation that is almost as fast as the imperative, mutable state version, but there are several algorithms with no known equivalent speed FP version. Also, even when the speeds are equivalent, sometimes the imperative mutable version is simpler.
Conversely, FP shines compared to imperative mutable state in things like concurrency. I have clojure code where I can replace a call to 'map' with a call to pmap (parallel map), and take advantage of multiple cores just by adding one character. Try doing that in C.
Conversely, FP shines compared to imperative mutable state in things like concurrency. I have clojure code where I can replace a call to 'map' with a call to pmap (parallel map), and take advantage of multiple cores just by adding one character. Try doing that in C.