Functional/non-functional and interpreted/compiled are two different categorizations, yet it seems that there are a lot of overlaps in the programming languages that fall under those categories. Is this a coincidence?
Why are most functional programming languages also interpreted languages?
programming languages;functional programming
There is no such thing as an interpreted language. A language is a set of abstract mathematical rules. A language isn't interpreted or compiled, it just is. Interpretation and compilation are traits of, well, the interpreter or compiler (duh!), not the language.A language is an abstract entity, an interpreter or compiler is a concrete implementation of that abstraction. The two live on completely different levels of abstraction. The term interpreted language is not just wrong, it doesn't even make sense. If English were a typed language, interpreted language would be a type error!You can't ask whether a language is an interpreted language, the answer isn't yes or no, because the question itself is non-sensical. It's like asking whether orange is a prime number.Every language can be implemented with an interpreter, and every language can be implemented with a compiler. You can automatically derive a compiler from an interpreter and an interpreter from a compiler.The vast majority of languages have both compiled and interpreted implementations. The vast majority of modern high-performance language implementations are mixed-mode implementations which combine interpretation and compilation.Now, let's look at some popular functional languages and some of their popular implementations:HaskellGHC, the Glorious Glasgow Haskell Compiler: obviously a compilerUHC, the Utrecht Haskell Compiler: again, a compilerJHC, also a compilerHUGS (no longer maintained): an interpreter Standard MLSML/NJ (Standard ML of New Jersey): a compilerMLton: a compilerML Kit: a compilerMoscow ML: a compilerTILT: a compilerSML.NET: a compilerAlice: an interpreterOCaml: there is only one implementation of OCaml, a compilerF: there is only one implementation of F (Microsoft Visual F), a compilerScala: there is only one implementation of Scala, a compilerClojureClojure: a compiler for the Java platformClojureCLR: a compiler for the CLI platformClojureScript: a compiler for the ECMAScript platformSchemeRacket: compiles Scheme to bytecode, then either interprets or compiles that byte codeStalin: a compilerGambit: a compilerCHICKEN: a compilerIkarus: a compilerLarceny: a compilerIronScheme: a compilerBigloo: a compilerKawa: an interpreterGauche: an interpreter