\documentclass[dvipsnames,14pt,t,xelatex]{beamer}+ −
\usepackage{../slides}+ −
\usepackage{../graphics}+ −
\usepackage{../langs}+ −
%\usepackage{../data}+ −
+ −
\hfuzz=220pt + −
+ −
%\setmonofont[Scale=.88]{Consolas}+ −
%\newfontfamily{\consolas}{Consolas}+ −
+ −
\lstset{language=Scala,+ −
style=mystyle,+ −
numbersep=0pt,+ −
numbers=none,+ −
xleftmargin=0mm}+ −
+ −
\newcommand{\bl}[1]{\textcolor{blue}{#1}} + −
+ −
% beamer stuff + −
\renewcommand{\slidecaption}{PEP (Scala) \liningnums{01}, King's College London}+ −
+ −
%https://insights.stackoverflow.com/survey/2019#technology-most-loved-dreaded-and-wanted+ −
+ −
\begin{document}+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[t]+ −
\frametitle{%+ −
\begin{tabular}{@ {}c@ {}}+ −
\\[5mm]+ −
\hspace{7mm}\huge PEP Scala (\liningnums{1}) + −
\end{tabular}}+ −
+ −
\normalsize+ −
\begin{center}+ −
\begin{tabular}{ll}+ −
Email: & christian.urban at kcl.ac.uk\\+ −
Office: & N\liningnums{7.07} (North Wing, Bush House)\\+ −
Slides \& Code: & KEATS\medskip\\+ −
Office Hours: & Mondays 12:00 -- 14:00\\+ −
& \alert{except next week: Tuesday}+ −
\end{tabular}+ −
\end{center}+ −
+ −
%\tiny+ −
%developed since 2004 bv Martin Odersky+ −
%picture about assignments+ −
+ −
\begin{textblock}{6}(0.5,0.5)+ −
\includegraphics[scale=0.035]{../pics/assign.jpg}\\[-1mm]+ −
\end{textblock}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Why Scala?}+ −
+ −
\begin{textblock}{6}(3,4)+ −
\begin{tabular}{l}+ −
\mbox{}\hspace{-1mm}\includegraphics[scale=0.36]{../pics/twitter.png}\\[-1mm]+ −
\includegraphics[scale=0.30]{../pics/linked.png}\\+ −
\includegraphics[scale=0.30]{../pics/guardian.jpg}\\[-3mm]+ −
\mbox{}\hspace{-2mm}\includegraphics[scale=0.38]{../pics/morgan.png}\\[-3mm]+ −
\includegraphics[scale=0.30]{../pics/suisse.png}\\+ −
{\large\bf ...}+ −
\end{tabular}+ −
\end{textblock}+ −
+ −
\begin{textblock}{6}(9,4)+ −
\begin{tabular}{l}+ −
\includegraphics[scale=0.20]{../pics/edf.png}\\[-1mm]+ −
\includegraphics[scale=0.08]{../pics/novell.png}\\[-1mm]+ −
\includegraphics[scale=0.30]{../pics/foursquare.png}\\+ −
\includegraphics[scale=0.30]{../pics/hsbc.png}\\+ −
{\large\bf ...}+ −
\end{tabular}+ −
\end{textblock}+ −
+ −
+ −
\begin{textblock}{6}(2,12)+ −
\begin{bubble}[9cm]+ −
\small+ −
developed since 2004 by Martin Odersky\\+ −
(he was behind Generic Java which was included in Java 5+ −
\ldots I am using it maybe since 2008?)+ −
\end{bubble}+ −
\end{textblock}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
%\begin{frame}[c]+ −
%\frametitle{Why Scala?}+ −
%+ −
%In the last few years there is a ``Cambrian explosion'' of+ −
%languages from both academia and industry.+ −
%+ −
%It is essential for students to have skills to pick up new languages+ −
%quickly.+ −
%+ −
%\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Why Scala?}+ −
+ −
\begin{itemize}+ −
\item compiles to the JVM\\+ −
\textcolor{gray}{(also JavaScript, native X86 in the works)}\medskip+ −
\item integrates seamlessly with Java\medskip+ −
\item combines \underline{\bf functional} and {\bf object-oriented} programming\bigskip+ −
\item it is a bit on the ``mathematical'' side\\+ −
\textcolor{gray}{(no pointers, no \texttt{null}, but expressions)}+ −
+ −
\item often one can write very concise and elegant code+ −
\end{itemize}\bigskip\medskip + −
+ −
\small+ −
alternatives:\\+ −
Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Java vs Scala}+ −
+ −
{\lstset{language=java}\fontsize{12}{12}\selectfont+ −
\texttt{\lstinputlisting{Point.java}}}+ −
+ −
\rule{11cm}{0.3mm}\\[-2mm]+ −
+ −
{\lstset{language=scala}\fontsize{12}{12}\selectfont+ −
\texttt{\lstinputlisting{Point.scala}}}+ −
+ −
\begin{textblock}{6}(13,3)+ −
\textbf{\large Java}+ −
\end{textblock}+ −
+ −
\begin{textblock}{6}(13,13.6)+ −
\textbf{\large Scala}+ −
\end{textblock} + −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
%\begin{frame}[c]+ −
%\frametitle{Scala (imperative) vs Scala (functional)}+ −
%+ −
%Reham's example+ −
%+ −
%+ −
%\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{First Steps: Scala Tools}+ −
+ −
\begin{itemize}+ −
\item I use VS Code and a Scala extension (M'place)+ −
\begin{center} + −
\includegraphics[scale=0.10]{../pics/vscode.png}\\[-10mm]\mbox{}+ −
\end{center}\bigskip+ −
+ −
\item there is a plugin for Eclipse (called Scala IDE)\medskip+ −
\item there is also a plugin for IntelliJ\medskip+ −
\end{itemize} + −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{\bf+ −
\only<1>{\begin{tabular}{l}\\[2mm]Why Scala?\\ \mbox{}\end{tabular}}+ −
\only<2->{\begin{tabular}{c}\\[2mm]Why Functional\\[-2mm] Programming?\end{tabular}}+ −
}+ −
+ −
%+ −
\mbox{}\\[3.5cm]+ −
\small+ −
Scala, Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots + −
+ −
\only<3>{+ −
\begin{textblock}{6}(2,6.2)+ −
\begin{bubble}[10cm]+ −
\normalsize``If you want to see which features will be in mainstream programming+ −
languages tomorrow, then take a look at functional programming+ −
languages today.''\medskip\small\\+ −
\hfill{}---Simon Peyton Jones (works at Microsoft)\\+ −
\hfill{}main developer of the Glasgow Haskell Compiler+ −
\end{bubble}+ −
\end{textblock}}+ −
+ −
\only<4>{+ −
\begin{textblock}{6}(5,5.8)+ −
\hspace{2mm}\includegraphics[scale=0.06]{../pics/assign.jpg}\\[-1mm]+ −
\Large\alert{\textbf{Immutability}}+ −
\end{textblock}}+ −
+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c, fragile]+ −
+ −
{\Large Why bother? or\smallskip\\\hfill What is wrong with this?}\bigskip\bigskip+ −
+ −
+ −
\begin{lstlisting}[language=C,numbers=none]+ −
for (int i = 10; i < 20; i++) {+ −
+ −
//...Do something interesting+ −
// with i...+ −
+ −
}+ −
\end{lstlisting}+ −
+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
\begin{frame}[c]+ −
\mbox{}\\[-21mm]\mbox{} + −
+ −
\begin{center}+ −
\begin{tikzpicture}[scale=1,+ −
node/.style={+ −
rectangle,rounded corners=3mm,+ −
very thick,draw=black!50,+ −
minimum height=18mm, minimum width=20mm,+ −
top color=white,bottom color=black!20}]+ −
+ −
\onslide<1-10>{ + −
\node (A) at (0,0) [node]+ −
{\mbox{\includegraphics[scale=0.15]{../pics/cplus2.jpg}}};+ −
\node [above right] at (A.north west) {1986};}+ −
+ −
\onslide<2->{+ −
\node (B) at (3.5,0) [node]+ −
{\mbox{\includegraphics[scale=0.15]{../pics/robotron.jpg}}};+ −
\node [above right] at (B.north west) {1988, C};+ −
\draw [->,line width=4mm] (A) -- (B);}+ −
+ −
\onslide<3->{+ −
\node (C0) at (6.3,0) {};+ −
\node (C) at (8,0) [node]+ −
{\mbox{\includegraphics[scale=0.15]{../pics/sun.jpg}}};+ −
\node [above right] at (C.north west) {1992, {\small Linux}};+ −
\draw [->,line width=4mm] (B) -- (C0);+ −
\draw [->,line width=4mm] (C0) -- (C);}+ −
+ −
\onslide<4->{+ −
\node (D) at (8,-3.3) [node]+ −
{\mbox{\includegraphics[scale=0.2]{../pics/gateway.jpg}}};+ −
\draw [->,line width=4mm] (C) -- (D);+ −
\node [below right] at (D.south west) {1996};}+ −
+ −
\onslide<5->{+ −
\node (E) at (4,-3.3) [node]+ −
{\mbox{\includegraphics[scale=0.1]{../pics/appleg4.jpg}}};+ −
\draw [->,line width=4mm] (D) -- (E);+ −
\node [above right] at (E.north west) {2000};} + −
+ −
\onslide<6->{+ −
\node (F0) at (1.5,-3.3) {};+ −
\node (F1) at (1,-3.3) {};+ −
\node (F) at (-0.9,-3.3) [node]+ −
{\mbox{\includegraphics[scale=0.3]{../pics/appleair.png}}};+ −
\draw [->,line width=4mm] (E) -- (F0);+ −
\draw [->,line width=4mm] (F1) -- (F); + −
\node [above right] at (F.north west) {2012?};} + −
+ −
\onslide<7->{+ −
\node (G) at (-0.9,-6.3) [node]+ −
{\mbox{\includegraphics[scale=0.02]{../pics/applepro.jpg}}};+ −
\draw [->,line width=4mm] (F) -- (G);+ −
\node [right] at (G.west) {\hspace{22mm}2017};} + −
+ −
\end{tikzpicture}+ −
\end{center}+ −
+ −
+ −
\only<1>{% + −
\begin{textblock}{10}(2.5,5) + −
\includegraphics[scale=0.26]{../pics/cplus1.jpg}\\+ −
\footnotesize 64K RAM, no HD, no monitor, lots of cables+ −
\end{textblock}+ −
\begin{textblock}{6}(10.9,4.5) + −
\includegraphics[scale=0.09]{../pics/mand1.png}+ −
\includegraphics[scale=0.09]{../pics/mand2.png}+ −
\end{textblock}+ −
\begin{textblock}{6}(10.8,2.2) + −
\huge\bf 3 days+ −
\end{textblock}+ −
}+ −
\only<8->{%+ −
\begin{textblock}{8}(5.8,11.6) + −
\large\bf+ −
\begin{tabular}{l@{}l}+ −
1986:\, & no Internet\\+ −
& no Amazon\\+ −
& no FB, no mobiles,\ldots\\ + −
\end{tabular} + −
\end{textblock}+ −
}+ −
\only<9>{+ −
\begin{textblock}{1}(3,3)+ −
\begin{bubble}[9cm] + −
\begin{tabular}{@{\hspace{8mm}}llll@{\hspace{8mm}}}+ −
\\+ −
\multicolumn{4}{c}{\alert{\bf Speedup by Moore's Law}}\medskip\\+ −
\textbf{1986:} & 3 days & \textbf{1996:} & 135 mins\\+ −
\textbf{1988:} & 1.5 days & \textbf{1998:} & 67 mins\\+ −
\textbf{1990:} & 18 hs & \textbf{2000:} & 33 mins\\+ −
\textbf{1992:} & 9 hs & \textbf{2002:} & 16 mins\\+ −
\textbf{1994:} & 4.5 hs & \multicolumn{2}{c}{???}\\ + −
\\+ −
\end{tabular}+ −
\small Every two years, computers got twice as powerful.+ −
\end{bubble}+ −
\end{textblock}}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Seq \;vs\; Par}+ −
+ −
\begin{center}+ −
\begin{tabular}[t]{@{}l@{}l@{}}+ −
\includegraphics[scale=0.14]{../pics/mand4.png} & \hspace{4mm}+ −
\raisebox{0mm}{\includegraphics[scale=0.14]{../pics/mand3.png}}\\+ −
\hspace{6mm}\includegraphics[scale=0.5]{../pics/cpu2.png} &+ −
\hspace{11mm}\includegraphics[scale=0.5]{../pics/cpu1.png}+ −
\end{tabular} + −
\end{center} + −
+ −
\only<2>{+ −
\begin{textblock}{5}(12,2)+ −
\begin{bubble}[2.1cm]+ −
\footnotesize{}in Java or C++\\+ −
\includegraphics[scale=0.50]{../pics/skeleton.jpg}\\+ −
\end{bubble} + −
\end{textblock}}+ −
+ −
\only<3>{+ −
\begin{textblock}{14.2}(1,13.5)+ −
In FP: Once a variable is created, it is assigned a value and then+ −
never changed again $\Rightarrow$ no synchronisation\smallskip\\+ −
%%\small\textcolor{gray}{(Andrew's second favourite feature of C++)}+ −
\end{textblock}}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
+ −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Types}+ −
+ −
\begin{itemize}+ −
\item Base types\smallskip+ −
+ −
\begin{tabular}{@{}l@{}}+ −
\textcolor{codegreen}{\texttt{Int}},+ −
\textcolor{codegreen}{\texttt{Long}},+ −
\textcolor{codegreen}{\texttt{BigInt}},+ −
\textcolor{codegreen}{\texttt{Float}},+ −
\textcolor{codegreen}{\texttt{Double}}\\+ −
\textcolor{codegreen}{\texttt{String}},+ −
\textcolor{codegreen}{\texttt{Char}}\\+ −
\textcolor{codegreen}{\texttt{Boolean}}+ −
\end{tabular}+ −
+ −
\item Compound types \smallskip + −
+ −
\begin{tabular}{@{}ll@{}}+ −
\textcolor{codegreen}{\texttt{List[Int]}} & lists of Int's \\+ −
\textcolor{codegreen}{\texttt{Set[Double]}} & sets of Double's \\+ −
\textcolor{codegreen}{\texttt{(Int, String)}} & Int-String pair\\+ −
\textcolor{codegreen}{\texttt{List[(BigInt, String)]}} &+ −
lists of BigInt-String\\+ −
& pairs\\+ −
\textcolor{codegreen}{\texttt{List[List[Int]]}} & list of lists of Int's\\ \textcolor{codegreen}{\texttt{Option[Int]}} & options of Int's \\ + −
\end{tabular}+ −
+ −
\end{itemize} + −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
%\begin{frame}[c]+ −
%\frametitle{An Http Request}+ −
+ −
%\begin{textblock}{1}(2,5)+ −
%\begin{tabular}{c}+ −
%\includegraphics[scale=0.15]{../pics/servers.png}\\[-2mm]+ −
%\small Server+ −
%\end{tabular}+ −
%\end{textblock}+ −
+ −
%\begin{textblock}{1}(5.6,4)+ −
% \begin{tikzpicture}[scale=1.1]+ −
% \draw[white] (0,1) node (X) {};+ −
% \draw[white] (2,1) node (Y) {};+ −
% \draw[white] (0,0) node (X1) {};+ −
% \draw[white] (2,0) node (Y1) {};+ −
% \draw[white] (0,-1) node (X2) {};+ −
% \draw[white] (2,-1) node (Y2) {};+ −
% \draw[red, <-, line width = 2mm] (X) -- (Y);+ −
% \node [inner sep=5pt,label=above:\textcolor{black}{GET request}] at ($ (X)!.5!(Y) $) {};+ −
% \draw[red, ->, line width = 2mm] (X1) -- (Y1);+ −
% \node [inner sep=5pt,label=above:\textcolor{black}{webpage}] at ($ (X1)!.5!(Y1) $) {};+ −
% \draw[red, <-, line width = 2mm] (X2) -- (Y2);+ −
% \node [inner sep=7pt,label=above:\textcolor{black}{POST data}] at ($ (X2)!.5!(Y2) $) {};+ −
% \end{tikzpicture}+ −
%\end{textblock}+ −
+ −
+ −
%\begin{textblock}{1}(9,5.5)+ −
%\begin{tabular}{c}+ −
%\includegraphics[scale=0.15]{../pics/laptop.png}\\[-2mm]+ −
%\small Browser+ −
%\end{tabular}+ −
%\end{textblock}+ −
%\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
%\begin{frame}[c]+ −
%+ −
%{\lstset{language=Java}\fontsize{7}{8}\selectfont+ −
%\texttt{\lstinputlisting{URLReader.java}}}+ −
%+ −
%\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Coursework}+ −
+ −
\begin{itemize}+ −
\item Sorry, I might have been a bit wordy:\\+ −
CW description is 7 pages, but+ −
I only needed \mbox{< 100} loc for \emph{all} the CW6.\bigskip+ −
+ −
\item there is email feedback when pushing code to github\medskip+ −
+ −
\item there are \texttt{jar}-files you can use to test my implementation\bigskip+ −
+ −
\item we want you to learn FP: \alert{\bf no vars}, no mutable+ −
data-structures, e.g.~no \texttt{Arrays}, no \texttt{ListBuffer}+ −
\end{itemize}+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
\begin{frame}[c, fragile]+ −
\frametitle{The Joy of Immutability}+ −
+ −
\begin{itemize}+ −
\item If you need to manipulate some data in a list say, then you make+ −
a new list with the updated values, rather than revise the original+ −
list. Easy!\medskip+ −
+ −
{\small+ −
\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]+ −
val old_list = List(1, 2, 3, 5)+ −
val new_list = 0 :: old_list+ −
\end{lstlisting}} + −
+ −
\item You do not have to be defensive about who can access the data.+ −
+ −
\item You can look at your code in isolation. + −
\end{itemize} + −
\end{frame}+ −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[t]+ −
\frametitle{Email: Hate 'val'}+ −
+ −
\mbox{}\\[-25mm]\mbox{}+ −
+ −
\begin{center}+ −
\begin{bubble}[10.5cm]+ −
Subject: \textbf{Hate '\textbf{\texttt{val}}'}\hfill 01:00 AM\medskip\\+ −
+ −
Hello Mr Urban,\medskip\\+ −
+ −
I just wanted to ask, how are we suppose to work+ −
with the completely useless \textbf{\texttt{val}}, that can’t be changed ever? Why is+ −
this rule active at all? I’ve spent 4 hours not thinking on the+ −
coursework, but how to bypass this annoying rule. What’s the whole+ −
point of all these coursework, when we can’t use everything Scala+ −
gives us?!?\medskip\\+ −
+ −
Regards.\\+ −
\mbox{}\hspace{5mm}\textcolor{black!50}{<<deleted>>}\\+ −
\end{bubble}+ −
\end{center}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
+ −
\mbox{}\\[-25mm]\mbox{}+ −
+ −
\begin{center}+ −
\begin{bubble}[10.5cm]+ −
Subject: \textbf{Re: Hate '\textbf{\texttt{val}}'}\hfill 01:02 AM\bigskip\bigskip\\+ −
+ −
\textcolor{black!70}{+ −
\textit{\large<<my usual rant about fp\ldots\\ concurrency bla bla\ldots{} better programs+ −
yada>>}}\bigskip\bigskip\bigskip+ −
+ −
PS: What are you trying to do where you desperately want to use \texttt{var}?+ −
\end{bubble}+ −
\end{center}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c,fragile]+ −
+ −
\begin{textblock}{6}(0.5,0.5)+ −
\begin{bubble}[11.5cm]+ −
\small + −
Subject: \textbf{Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:04 AM\medskip\\+ −
+ −
\textbf{Right now my is\_legal function works fine:}+ −
+ −
\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]+ −
def is_legal(dim: Int, path: Path)(x: Pos): Boolean = {+ −
var boolReturn = false+ −
if(x._1 > dim || x._2 > dim || x._1 < 0 || x._2 < 0) {+ −
else { var breakLoop = false+ −
if(path == Nil) { boolReturn = true }+ −
else { for(i <- 0 until path.length) {+ −
if(breakLoop == false) {+ −
if(path(i) == x) {+ −
boolReturn = true+ −
breakLoop = true+ −
}+ −
else { boolReturn = false }+ −
} else breakLoop+ −
}+ −
}+ −
boolReturn+ −
}+ −
\end{lstlisting}+ −
\end{bubble}+ −
\end{textblock}+ −
+ −
\begin{textblock}{6}(8.2,11.8)+ −
\begin{bubble}[5.5cm]\footnotesize\bf+ −
\ldots{}but I can’t make it work with boolReturn being val. What approach would+ −
you recommend in this case, and is using var in this case justified?+ −
\end{bubble}+ −
\end{textblock}+ −
+ −
\only<2>{+ −
\begin{textblock}{6}(0.3,11.8)+ −
\begin{bubble}[3.1cm]+ −
\textbf{Me:}+ −
\raisebox{-12mm}{\includegraphics[scale=0.08]{../pics/throwup.jpg}}+ −
\end{bubble}+ −
\end{textblock}}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[t,fragile]+ −
+ −
\mbox{}\\[-25mm]\mbox{}+ −
+ −
\begin{textblock}{6}(0.5,2)+ −
\begin{bubble}[11.5cm]+ −
Subject: \textbf{Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:06 AM\bigskip\\+ −
\small+ −
+ −
OK. So you want to make sure that the \texttt{x}-position is not outside the+ −
board....and furthermore you want to make sure that the \texttt{x}-position+ −
is not yet in the path list. How about something like\bigskip+ −
+ −
\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]+ −
def is_legal(dim: Int, path: Path)(x: Pos): Boolean = + −
...<<some board conditions>>... && !path.contains(x)+ −
\end{lstlisting}\bigskip+ −
+ −
\small Does not even contain a \texttt{val}.+ −
\end{bubble}+ −
\end{textblock}+ −
+ −
\begin{textblock}{6}(7,12)+ −
\footnotesize\textcolor{black!50}{(This is all on one line)}+ −
\end{textblock}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[t,fragile]+ −
+ −
\mbox{}\\[-15mm]\mbox{}+ −
+ −
\begin{textblock}{6}(1,3)+ −
\begin{bubble}[10.5cm]+ −
Subject: \textbf{Re: Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 11:02 AM\bigskip\bigskip\\+ −
+ −
THANK YOU! You made me change my coding perspective. Because of you,+ −
I figured out the next one\ldots+ −
\end{bubble}+ −
\end{textblock}+ −
+ −
\only<2>{+ −
\begin{textblock}{6}(0.3,11.8)+ −
\begin{bubble}[3.1cm]+ −
\textbf{Me:}+ −
\raisebox{-12mm}{\includegraphics[scale=0.15]{../pics/happy.jpg}}+ −
\end{bubble}+ −
\end{textblock}}+ −
+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{Conclusion}+ −
+ −
\begin{itemize}+ −
\item Scala is still under heavy development\\ (the compiler is terribly slow)\medskip+ −
\item {\bf\url{http://www.scala-lang.org/}}\bigskip+ −
+ −
\item it is a rather \textbf{\alert{deep}} language\ldots i.e.~gives+ −
you a lot of rope to shoot yourself\bigskip+ −
+ −
\item learning functional programming is not easy\ldots{}when you have+ −
spent all of your career thinking in an imperative way, it is hard to+ −
change\bigskip\medskip+ −
+ −
\item hope you have fun with Scala and the assignments+ −
\end{itemize}+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ −
\begin{frame}[c]+ −
\frametitle{\begin{tabular}{c}\\[0cm]\alert{Questions?}\end{tabular}}+ −
+ −
\begin{center}+ −
\begin{tabular}[t]{@{}l@{}l@{}}+ −
\includegraphics[scale=0.1]{../pics/mand4.png} & \hspace{4mm}+ −
\raisebox{0mm}{\includegraphics[scale=0.1]{../pics/mand3.png}} + −
\end{tabular} + −
\end{center}+ −
+ −
\begin{center}+ −
My Office Hours: Mondays 12 -- 14\\+ −
except next week: Tuesday 12 -- 14+ −
\end{center}+ −
\end{frame}+ −
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + −
\end{document}+ −
+ −
+ −
\end{document}+ −
+ −
%%% Local Variables: + −
%%% mode: latex+ −
%%% TeX-master: t+ −
%%% End: + −
+ −
+ −
“Functional programming is often regarded as the best-kept secret of+ −
scientific modelers, mathematicians, artificial intelligence+ −
researchers, financial institutions, graphic designers, CPU designers,+ −
compiler programmers, and telecommunications engineers.â€+ −
+ −
The Wikipedia F# page+ −