\subsection{Généralités}
\begin{frame}
\frametitle{Langages fonctionnels}

\begin{block}{Programmation fonctionnelle}
\begin{itemize}
\item expression sous forme \og{}mathématique\fg{} du code
\item prédictible, sans effet de bord, le résultat ne dépend que des valeurs en
entrée
\item pas de changement d'état ($var = 2; var = 3$)
\end{itemize}
\end{block}

\begin{block}{Avantages}
\begin{itemize}
\item les algorithmes s'expriment plus naturellement
\item chaque fonction peut être testée individuellement
\item le code est "prouvable" (nécessaire sur des applications très critiques)
\end{itemize}
\end{block}

\end{frame}

\begin{frame}[fragile]
\frametitle{exemples de code}
\begin{exampleblock}{C}
\begin{verbatim}
int factorielle(int n) {
    if (n > 1) return n * factorielle(n - 1);
    else return 1;
}
\end{verbatim}
\end{exampleblock}


\begin{exampleblock}{haskell}
\begin{verbatim}
fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n - 1)
\end{verbatim}
\end{exampleblock}
\end{frame}
