215 lines
No EOL
5.2 KiB
TeX
215 lines
No EOL
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{9pt}{9pt}\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} |