For questions relating to teaching the functional programming paradigm. A few examples of languages which support this paradigm are Haskell, Scheme, Lisp, Racket, OCaml, Clojure, ML, and Erlang.
Functional programming is a paradigm in which computations are carried out on values, primarily by creating and evaluating functions that return those values. Typically, a function is itself a value and so functional languages are highly recursive, both in definition and in execution.
The thought process when programming functionally is normally quite different than imperative programming as it normally proceeds without the C notion of a variable (i.e. a mutable association between a name and a value).