## General information
*Mathematica*'s functional programming features allow users to treat functions as expressions in the same way that data are expressions. This functionality is usually more efficient than the use of `Do[]` and `For[]` loops that are more familiar to users of procedural programming languages like C or Fortran. By using dedicated built-in *Mathematica* functions and pure functions, one can write code where the output of a function is set to be the direct input of a next function, without ever introducing temporary variables at all.

An important part of this functionality is the use of [pure functions](http://reference.wolfram.com/mathematica/tutorial/PureFunctions.html), known in some other languages as "anonymous functions". These are usually distinguishable through their use of [`Function[]` (`&`)](http://reference.wolfram.com/mathematica/ref/Function.html) and the (optional) accompanying use of [`Slot` (`#`)](http://reference.wolfram.com/mathematica/ref/Slot.html) and/or [`SlotSequence` (`##`)](http://reference.wolfram.com/mathematica/ref/SlotSequence.html), in place of arguments.

##Useful links

 - [Mathematica main documentation page on functional programming](http://reference.wolfram.com/mathematica/guide/FunctionalProgramming.html)
 - [Tutorial by Atif Memon at the University of Maryland](http://www.cs.umd.edu/~atif/Teaching/Spring2007/Lectures/FunctionalProgramming.pdf)
 - [Say no to loops!](http://www.verbeia.com/mathematica/mma/say_no_to_loops.nb) (Mathematica notebook): older tutorial available at Verbeia.com
 - [Excerpt from Sal Mangano's *Mathematica Cookbook*](http://my.safaribooksonline.com/book/mathematica/9781449382001/mathematica-cookbook/id3215971)