Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo estas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la "transparencia referencial" (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de "efectos colaterales".