updated
authorChristian Urban <urbanc@in.tum.de>
Mon, 04 Nov 2019 00:51:10 +0000
changeset 309 b192bc772613
parent 308 e86add5a6961
child 310 335079d938aa
updated
pics/pure.png
pics/salary1.png
pics/salary2.png
progs/lecture2.scala
progs/mandelbrot.scala
slides/slides01.pdf
slides/slides01.tex
Binary file pics/pure.png has changed
Binary file pics/salary1.png has changed
Binary file pics/salary2.png has changed
--- a/progs/lecture2.scala	Sun Nov 03 14:42:17 2019 +0000
+++ b/progs/lecture2.scala	Mon Nov 04 00:51:10 2019 +0000
@@ -525,6 +525,45 @@
 } 
 
 
+// Recursion
+//===========
+
+/* a, b, c
+
+aa         aaa
+ab         baa 
+ac         caa 
+ba  =>     ......
+bb
+bc
+ca
+cb
+cc
+
+*/
+
+def perms(cs: List[Char], l: Int) : List[String] = {
+  if (l == 0) List("")
+  else for (c <- cs; s <- perms(cs, l - 1)) yield s"$c$s"
+}
+
+perms("abc".toList, 2)
+
+def move(from: Char, to: Char) =
+  println(s"Move disc from $from to $to!")
+
+def hanoi(n: Int, from: Char, via: Char, to: Char) : Unit = {
+  if (n == 0) ()
+  else {
+    hanoi(n - 1, from, to, via)
+    move(from, to)
+    hanoi(n - 1, via, from, to)
+  }
+} 
+
+hanoi(40, 'A', 'B', 'C')
+
+
 // Tail Recursion
 //================
 
--- a/progs/mandelbrot.scala	Sun Nov 03 14:42:17 2019 +0000
+++ b/progs/mandelbrot.scala	Mon Nov 04 00:51:10 2019 +0000
@@ -1,9 +1,11 @@
 // Mandelbrot pictures
+//=====================
 //
 //   see https://en.wikipedia.org/wiki/Mandelbrot_set
 // 
-// under scala 2.13 needs to be called with 
-// scala -cp `coursier fetch -p org.scala-lang.modules:scala-parallel-collections_2.13:0.2.0` mandelbrot.scala
+// under scala 2.13.1 needs to be called with
+// 
+// scala -cp scala-parallel-collections_2.13-0.2.0.jar mandelbrot.scala
 
 import java.awt.Color
 import java.awt.Dimension
@@ -102,8 +104,8 @@
   val d_x = (end.re - start.re) / W
   val d_y = (end.im - start.im) / H
    
-  for (y <- (0 until H).par) {
-    for (x <- (0 until W).par) {
+  for (y <- (0 until H)) {
+    for (x <- (0 until W)) {
     
      val c = start + 
       (x * d_x + y * d_y * i)
@@ -135,7 +137,7 @@
 val exa1 = -2.0 + -1.5 * i
 val exa2 =  1.0 +  1.5 * i
 
-time_needed(mandelbrot(exa1, exa2, 1000))
+println(s"${time_needed(mandelbrot(exa1, exa2, 1000))} secs")
 
 // example 2
 val exb1 = -0.37465401 + 0.659227668 * i
@@ -156,25 +158,19 @@
 val delta = (exc2 - exc1) * 0.0333
 
 /*
-time_needed(
+println(s"${time_needed(
   for (n <- (0 to 12)) 
      mandelbrot(exc1 + delta * n, 
-                exc2 - delta * n, 100)) 
+                exc2 - delta * n, 100))} secs") 
 */
 
-/*
-time_needed(
-  for (n <- (0 to 12)) 
-     mandelbrot(exc1 + delta * n, 
-                exc2 - delta * n, 1000))
-*/
 
 
 // Larry Paulson's example
 val exl1 = -0.74364990 + 0.13188170 * i
 val exl2 = -0.74291189 + 0.13261971 * i
 
-//time_needed(mandelbrot(exl1, exl2, 1000))
+//println(s"${time_needed(mandelbrot(exl1, exl2, 1000))} secs")
 
 
 // example by Jorgen Villadsen
Binary file slides/slides01.pdf has changed
--- a/slides/slides01.tex	Sun Nov 03 14:42:17 2019 +0000
+++ b/slides/slides01.tex	Mon Nov 04 00:51:10 2019 +0000
@@ -4,6 +4,7 @@
 \usepackage{../graphics}
 \usepackage{../langs}
 %\usepackage{../data}
+\usetikzlibrary{shapes}
 
 \hfuzz=220pt 
 
@@ -16,7 +17,29 @@
         numbers=none,
         xleftmargin=0mm}
 
-\newcommand{\bl}[1]{\textcolor{blue}{#1}}     
+\newcommand{\bl}[1]{\textcolor{blue}{#1}}    
+
+\newcommand{\RIGHTarrow}[3]{%
+\begin{textblock}{0}(#2,#3)%
+\onslide<#1>{%
+\begin{tikzpicture}%
+\node at (0,0) [single arrow, shape border rotate=0, fill=red,text=red]{a};%
+\end{tikzpicture}}%
+\end{textblock}}
+\newcommand{\LEFTarrow}[3]{%
+\begin{textblock}{0}(#2,#3)%
+\onslide<#1>{%
+\begin{tikzpicture}%
+\node at (0,0) [single arrow, shape border rotate=180, fill=red,text=red]{a};%
+\end{tikzpicture}}%
+\end{textblock}}
+\newcommand{\DOWNarrow}[3]{%
+\begin{textblock}{0}(#2,#3)%
+\onslide<#1>{%
+\begin{tikzpicture}%
+\node at (0,0) [single arrow, shape border rotate=270, fill=red,text=red]{a};%
+\end{tikzpicture}}%
+\end{textblock}}
 
 % beamer stuff 
 \renewcommand{\slidecaption}{PEP (Scala) \liningnums{01}, King's College London}
@@ -37,8 +60,8 @@
   \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: & N\liningnums{7.07} (North Wing, Bush House)\bigskip\\
+    Slides \& Code: & KEATS\bigskip\\
     Office Hours: &  Thursdays 12:00 -- 14:00\\
     Additionally: & (for Scala) Tuesdays 10:45 -- 11:45\\ 
   \end{tabular}
@@ -94,18 +117,6 @@
 \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}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -153,16 +164,6 @@
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\begin{frame}[c]
-%\frametitle{Scala (imperative) vs Scala (functional)}
-%
-%Reham's example
-%
-%
-%\end{frame}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -184,19 +185,50 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t]
+\frametitle{Why Scala?}
+
+\onslide<2->{%
+\begin{center} 
+{\large\bf{}Money?}\bigskip\\  
+\begin{tabular}{@{}c@{}c@{}}
+\includegraphics[scale=0.2]{../pics/salary1.png} &
+\includegraphics[scale=0.2]{../pics/salary2.png}\\
+\multicolumn{2}{r@{}}{\footnotesize$^*$ source: Stackoverflow Developer Survey, 2019}
+\end{tabular}  
+\end{center}
+\RIGHTarrow{2}{2.3}{5.45}
+\DOWNarrow{2}{10.1}{3.6}
+}
+
+
+\small
+Elm, Rust, Haskell, Ocaml, F$\#$, Erlang, ML, Lisp (Racket)\ldots 
+
+\only<3>{
+\begin{textblock}{6}(3.3,6.2)
+\begin{bubble}[6.5cm]
+\bf\huge\textcolor{RoyalBlue}{Functional Programming!}
+\end{bubble}
+\end{textblock}}
+
+\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}}
+  \frametitle{\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 
+Elm, Haskell, Ocaml, F$\#$, Erlang, ML, Lisp (Racket)\ldots 
 
-\only<3>{
-\begin{textblock}{6}(2,6.2)
+\only<2>{
+\begin{textblock}{6}(1.3,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
@@ -206,10 +238,10 @@
 \end{bubble}
 \end{textblock}}
 
-\only<4>{
+\only<3>{
 \begin{textblock}{6}(5,5.8)
 \hspace{2mm}\includegraphics[scale=0.06]{../pics/assign.jpg}\\[-1mm]
-\Large\alert{\textbf{Immutability}}
+\Large\alert{\hspace{5mm}\textbf{Immutability}}
 \end{textblock}}
 
 
@@ -217,6 +249,20 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+
+\begin{center}  
+\includegraphics[scale=0.4]{../pics/pure.png}
+\end{center}
+
+\begin{textblock}{6}(9,14)
+\tiny$^*$ from ``What pure functional programming is all about?''
+\end{textblock}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[c, fragile]
 
 {\Large Why bother? or\smallskip\\\hfill What is wrong with this?}\bigskip\bigskip
@@ -460,6 +506,28 @@
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[c]
+  \frametitle{Coursework Dates}
+  
+Similar to C++:\bigskip
+
+\begin{itemize}
+  \item Preliminary Parts: Wednesdays 4pm
+    \begin{itemize}
+      \item Preliminary Part 6: 3\% (13 November)
+      \item Preliminary Part 7: 4\% (20 November)
+      \item Preliminary Part 8: 4\% (27 November)
+      \item Preliminary Part 9: 4\% (5 December) 
+    \end{itemize}\medskip    
+  \item Core Part: 35\% (15 January 2020) 
+  
+\end{itemize}
+\end{frame}
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
 \frametitle{Coursework}
 
 \begin{itemize}
@@ -469,11 +537,14 @@
 
 \item there is feedback when pushing code to github\medskip
 
-\item there are \texttt{jar}-files you can use to test my implementation\bigskip
+\item there are \texttt{jar}-files you can use to test 
+  my reference 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}
+\item we want you to learn FP!\smallskip\\ \alert{\bf no vars}, no mutable
+  data-structures\\ \quad{}e.g.~no \texttt{Arrays}, no \texttt{ListBuffer}
 \end{itemize}
+
+\LEFTarrow{1}{11}{11.8}
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -659,10 +730,11 @@
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[c]
-\frametitle{Conclusion}
+\frametitle{Conclusion for Today}
 
 \begin{itemize}
-\item Scala is still under heavy development\\ (the compiler is terribly slow)\medskip
+\item Scala is still under development, 2.13.1 came out in Sept.\\ 
+  (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
@@ -690,7 +762,7 @@
 
 \begin{center}
   My Office Hours: Thursdays 12 -- 14\\
-  And specifically for Scala: Tuesday 10:45 -- 11:45
+  And specifically for Scala: Tuesdays 10:45 -- 11:45
 \end{center}
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%