archives

What are the properties of "Functional Programming Languages"?

1 - Please let standardize the dynamically-typed, statically-typed, weakly-typed and strongly-typed definitions. We have 2 dimensions here:
a) dynamically-typed statically-typed
and
b) weakly-typed strongly-typed

strongly-typed: Every value has a type and can not implicitly be converted.
weakly-typed: Every value has a type and can implicitly be converted.
statically-typed: Every value has a type at compile time.
dynamically-typed: Values has not a type at compile time.

Haskell, C#, Java are statically-typed and strongly-typed.
Ruby, Python are dynamically-typed and strongly-typed.
C is statically-typed and weakly-typed.
PHP is dynamically-typed and weakly-typed.

(Unfortunately even in MIT Schema description (PDF) this concepts are used misunderstoodly)

(Let's for now forget about things like Linear typed languages.)

2 - Now in every of mentioned groups, which features must be implemented for that the language could be assumed as a functional one?

For example JavaScript and Ruby are dynamically-typed. So things like pattern-matching are meaningless in their scope (or have a very different meaning).

Is "purity" really needed in a language to be considered as functional programming? Personally I do not think so. Because I think functional programming is about higher-order composability. For example structural-composability gives you the power to make more pluggable codes.

So again the question:
What are the properties of "Functional Programming Languages"?