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

\begin{block}{Principe}
Chaque action du code est vue comme une opération mathématique exprimée sous
forme de fonction.

Ces langages interdisent le changement d'état (changement de valeur d'une
variable).
\end{block}
\end{frame}

\begin{frame}
\frametitle{Langages fonctionnels}
\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}

\begin{block}{Inconvénient}
Ces langages sont souvent mal connus et donc plus difficiles à appréhender.
\end{block}

\end{frame}

\begin{frame}[fragile]
\frametitle{exemples de code}
\begin{exampleblock}{C}
\begin{verbatim}
int foo (int bar) {
    return bar * 10 + 4;
}
\end{verbatim}
\end{exampleblock}


\begin{exampleblock}{haskell}
\begin{verbatim}
foo :: Int -> Int
foo bar = bar * 10 + 4
\end{verbatim}
\end{exampleblock}
\end{frame}
