presentation-fp-haskell/Functional programming.tex

215 lines
5.2 KiB
TeX
Raw Normal View History

2020-01-19 18:07:41 +00:00
\documentclass[aspectratio=169,10pt]{beamer}
2020-01-09 01:19:41 +00:00
\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}
2020-01-19 17:52:58 +00:00
\date{20. January 2020} % Replace with date of the presentation
2020-01-09 01:19:41 +00:00
\begin{frame}[plain]
\maketitle
\end{frame}
\begin{frame}{Overview}
\tableofcontents
\end{frame}
\section{Introduction}
\begin{frame}
\frametitle{Languages}
\begin{center}
\begin{tabular}{ccc}
2020-01-19 18:07:41 +00:00
\onslide<2->{\mybox{\includegraphics[width=.16\linewidth]{pictures/Lisplogo_alien_256.png}}} &
2020-01-09 01:19:41 +00:00
&
2020-01-19 18:07:41 +00:00
\onslide<3->{\mybox{\includegraphics[width=.16\linewidth]{pictures/OCaml_Logo.png}}}
2020-01-09 01:19:41 +00:00
\\
&
\onslide<6->{\mybox{\includegraphics[width=.25\linewidth]{pictures/Haskell-Logo.png}}}
&
\\
2020-01-19 18:07:41 +00:00
\onslide<4->{\mybox{\includegraphics[width=.12\linewidth]{pictures/Swift-Logo.png}}}
2020-01-09 01:19:41 +00:00
&
&
2020-01-19 18:07:41 +00:00
\onslide<5->{\mybox{\includegraphics[height=.12\linewidth]{pictures/Elixir-Logo.png}}}
2020-01-09 01:19:41 +00:00
\end{tabular}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Core Concepts}
\begin{itemize}
2020-01-09 01:44:20 +00:00
\item \underline{Purity}\\
{\onslide<2->{\color{lightgray}A pure function must produce the same
2020-01-09 01:19:41 +00:00
result given the same input and does not rely on or alter external state.}}
2020-01-09 01:44:20 +00:00
\item \underline{Non-imperativeness}\\
2020-01-09 01:19:41 +00:00
{\onslide<3->{\color{lightgray}A function is not a sequence of commands, but
a nesting of other functions.}}
2020-01-09 01:44:20 +00:00
\item \underline{First Class Citizenship}\\
2020-01-09 01:19:41 +00:00
{\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}\\
2020-01-19 17:52:58 +00:00
{\onslide<5->{\color{lightgray}Functions can only access variables inside the
context they have been created in. This is possible even when the function
2020-01-09 01:19:41 +00:00
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
2020-01-09 02:30:34 +00:00
\item<3-> Immutable variables
\item<4-> No loops
\item<5-> No state
2020-01-09 01:19:41 +00:00
\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[
2020-01-20 07:00:10 +00:00
basicstyle=\color{white}\fontsize{8pt}{8pt}\ttfamily
2020-01-09 01:19:41 +00:00
]{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!}\\
2020-01-09 01:26:07 +00:00
\vspace{1cm}
This presentation is available for download at:\\
2020-01-09 01:19:41 +00:00
\url{https://github.com/nek0/presentation-fp-haskell}
\end{center}
\end{frame}
\end{document}