presentation-fp-haskell/Functional programming.tex

215 lines
5.2 KiB
TeX

\documentclass[aspectratio=169,10pt]{beamer}
\usepackage{fontspec}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{listings}
\usepackage{tcolorbox}
\usepackage{hyperref}
\newtcbox{\mybox}{
on line,
%colframe=mycolor,
colback=lightgray,
%boxrule=0.5pt,
arc=4pt,
boxsep=0pt,
left=6pt,
right=6pt,
top=6pt,
bottom=6pt
}
\lstdefinelanguage{Haskelln}{
language = Haskell,
otherkeywords = {=>,->,::,++,!!,|,<-},
}
\lstset{
frame=none,
xleftmargin=2pt,
stepnumber=1,
numbers=none,
numbersep=5pt,
numberstyle=\ttfamily\tiny\color{lightgray},
belowcaptionskip=\bigskipamount,
captionpos=b,
escapeinside={*'}{'*},
language=Haskelln,
tabsize=2,
emphstyle={\bf},
commentstyle=\it,
stringstyle=\mdseries\ttfamily\color{green},
showspaces=false,
keywordstyle=[1]\color{cyan}\bfseries\ttfamily,
keywordstyle=[2]\color{orange}\bfseries\ttfamily,
keywordstyle=[3]\color{yellow}\bfseries\ttfamily,
keywordstyle=[4]\color{red}\bfseries\ttfamily,
keywordstyle=[5]\color{purple}\bfseries\ttfamily,
keywordstyle=[6]\color{blue}\bfseries\ttfamily,
%keywordstyle=\color{cyan}\ttfamily
columns=flexible,
basicstyle=\color{white}\small\ttfamily,
showstringspaces=false,
morecomment=[l]\%,
emptylines=1,
}
% You can set fonts for Latin script here
\setmainfont{FreeSerif}
\setsansfont{FreeSans}
\setmonofont{Fira Mono}
\usetheme{DarkConsole}
\begin{document}
% The metadata of the presentation
\title{Functional Programming}
\subtitle{Using the example of Haskell}
\author[]{Amedeo Molnár - \href{mailto:nek0@nek0.eu}{nek0@nek0.eu}}
%\institute{SRH Berufsbildungswerk Dresden gGmbH}
\date{20. January 2020} % Replace with date of the presentation
\begin{frame}[plain]
\maketitle
\end{frame}
\begin{frame}{Overview}
\tableofcontents
\end{frame}
\section{Introduction}
\begin{frame}
\frametitle{Languages}
\begin{center}
\begin{tabular}{ccc}
\onslide<2->{\mybox{\includegraphics[width=.16\linewidth]{pictures/Lisplogo_alien_256.png}}} &
&
\onslide<3->{\mybox{\includegraphics[width=.16\linewidth]{pictures/OCaml_Logo.png}}}
\\
&
\onslide<6->{\mybox{\includegraphics[width=.25\linewidth]{pictures/Haskell-Logo.png}}}
&
\\
\onslide<4->{\mybox{\includegraphics[width=.12\linewidth]{pictures/Swift-Logo.png}}}
&
&
\onslide<5->{\mybox{\includegraphics[height=.12\linewidth]{pictures/Elixir-Logo.png}}}
\end{tabular}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Core Concepts}
\begin{itemize}
\item \underline{Purity}\\
{\onslide<2->{\color{lightgray}A pure function must produce the same
result given the same input and does not rely on or alter external state.}}
\item \underline{Non-imperativeness}\\
{\onslide<3->{\color{lightgray}A function is not a sequence of commands, but
a nesting of other functions.}}
\item \underline{First Class Citizenship}\\
{\onslide<4->{\color{lightgray}Functions are equal to other data objects and
can thus be passed as function arguments or be computation results
themselves.}}
\item \underline{Closures}\\
{\onslide<5->{\color{lightgray}Functions can only access variables inside the
context they have been created in. This is possible even when the function
itself has left this context. In this case the variable values are frozen at
the moment of departure inside the function.}}
\item \underline{Lambdas}\\
{\onslide<6->{\color{lightgray}A function definition can take place without
an explicit name in the position of a function symbol.}}
\end{itemize}
\end{frame}
\section{Main differences to imperative programming}
\begin{frame}
\frametitle{\secname}
\begin{itemize}
\item<2-> Avoidance of side effects
\item<3-> Immutable variables
\item<4-> No loops
\item<5-> No state
\end{itemize}
\end{frame}
\section{Examples}
\begin{frame}[fragile]
\frametitle{\secname}
\begin{lstlisting}
sq :: (Floating a) => a -> a
sq x = x * x
\end{lstlisting}
\vspace{1cm}
\begin{lstlisting}
ringArea :: (Floating a) => a -> a -> a
ringArea r1 r2 = pi * (sq r1 - sq r2)
\end{lstlisting}
\vspace{1cm}
\begin{lstlisting}
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Advanced Example}
\lstinputlisting[
basicstyle=\color{white}\fontsize{8pt}{8pt}\ttfamily
]{12days.hs}
\end{frame}
\section{Fields of Application}
\begin{frame}
\frametitle{Fields of Application}
\begin{itemize}
\item<2-> Big Data
\item<3-> Finance Sector
\item<4-> Science
\item<5-> Virtually everywhere
\end{itemize}
\end{frame}
\section{Conclusion}
\begin{frame}
\frametitle{Literature recommendations}
\begin{itemize}
\item \href{http://learnyouahaskell.com/}{Learn you a Haskell for Great Good!}
\item \href{http://book.realworldhaskell.org/}{Real World Haskell}
\item
\href{https://www.oreilly.com/library/view/parallel-and-concurrent/9781449335939}{Parallel and Concurrent Programming in Haskell}
\item \href{http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf}{The Haskell
School of Music}
\end{itemize}
\end{frame}
\begin{frame}[plain]
\begin{center}
{\Huge Thank you for your attention!}\\
\vspace{1cm}
This presentation is available for download at:\\
\url{https://github.com/nek0/presentation-fp-haskell}
\end{center}
\end{frame}
\end{document}