wsheets/wsh02.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Thu, 17 Nov 2022 11:34:50 +0000
changeset 445 b73e7ce91c10
parent 444 wsheets/wsh01.tex@7a0735db4788
child 447 f51e593903ac
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
197
Christian Urban <urbanc@in.tum.de>
parents: 195
diff changeset
     1
% !TEX program = xelatex
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     2
\documentclass{article}
426
b51467741af2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 400
diff changeset
     3
\usepackage{../styles/style}
b51467741af2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 400
diff changeset
     4
\usepackage{../styles/langs}
272
da3d30ae67ec updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
     5
\usepackage{tikz}
da3d30ae67ec updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
     6
\usepackage{pgf}
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
\usepackage{marvosym}
184
84dc794928de updated
pdated
parents: 183
diff changeset
     8
\usepackage{boxedminipage}
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
352
97bcf8efe4e0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    10
\lstset{escapeinside={/*!}{!*/}}
97bcf8efe4e0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    11
\newcommand{\annotation}[1]{\hfill\footnotesize{}#1}
272
da3d30ae67ec updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
    12
352
97bcf8efe4e0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    13
\usepackage{menukeys}
335
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    14
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    15
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    16
% Exact colors from NB
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    17
\usepackage[breakable]{tcolorbox}
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    18
\definecolor{incolor}{HTML}{303F9F}
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    19
\definecolor{outcolor}{HTML}{D84315}
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    20
\definecolor{cellborder}{HTML}{CFCFCF}
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    21
\definecolor{cellbackground}{HTML}{F7F7F7}
334
841727e27252 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 333
diff changeset
    22
335
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    23
7e00d2b13b04 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    24
    
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    25
\begin{document}
442
c86e7dd198bf updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    26
\fnote{\copyright{} Christian Urban, King's College London, 2022}
195
fc3ac7b70a06 updated
Christian Urban <urbanc@in.tum.de>
parents: 193
diff changeset
    27
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    28
\section*{Scala Worksheet 2}
271
48e12e7aee6e updated
Christian Urban <urbanc@in.tum.de>
parents: 270
diff changeset
    29
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    30
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    31
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    32
\subsection*{Task 1 (Options)}
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    33
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    34
Get familiar with constructing strings and printing strings
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    35
(i.e.~\texttt{println}, \texttt{mkString}, \texttt{toString}, \ldots)
301
c3b33c709696 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
    36
c3b33c709696 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
    37
\begin{lstlisting}[numbers=none]
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    38
scala> List(7,2,3,4,5,6).find(_ < 4)
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    39
scala> List(5,6,7,8,9).find(_ < 4)
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    40
scala> 
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    41
\end{lstlisting}
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    42
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    43
\subsection*{Task 2 (URLs / Files)}
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    44
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    45
ALso Try
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    46
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    47
\begin{lstlisting}[numbers=none]
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    48
scala> 
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    49
scala> 
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    50
scala> 
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    51
\end{lstlisting}
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    52
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    53
\subsection*{Task 3 (Higher-Order Functions)}
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    54
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    55
Make sure you understand if-conditions in Scala: They are
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    56
\emph{expressions}, meaning they need to calculate a result. For
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    57
example an \texttt{if} without an else-branch is nearly always
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    58
\emph{not} what you intend to write (because you are not meant to
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    59
change any ``state'' outside the expression). Also, remember the quirks
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    60
in Scala with if-conditions needing parentheses and there is no
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    61
\texttt{then}-keyword.
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    62
442
c86e7dd198bf updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    63
\begin{lstlisting}[numbers=none]
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    64
scala> val s1 = "foo"
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    65
scala> val s2 = "bar"
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    66
scala  val s3 = "foobar"
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    67
scala> if (s1 == s2) print("equal") else print("unequal")
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    68
scala> if (s1 ++ s2 == s3) print("equal") else print("unequal")
343
c8fcc0e0a57f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
    69
\end{lstlisting}
c8fcc0e0a57f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
    70
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    71
\subsection*{Task 4 (Maps)}
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    72
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    73
Write \texttt{for}-comprehensions that enumerate all triples containing the numbers 1 - 5. That is,
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    74
print the list
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    75
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    76
\[
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    77
\texttt{(1,1,1)}, \texttt{(2,1,1)}, \texttt{(3,1,1)} \;\ldots\; \texttt{(5,5,5)}
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    78
\]
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    79
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    80
\noindent
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    81
Modify the \texttt{for}-comprehensions such that only triples are
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    82
printed where the sum is divisible by 3.  Then sort the list according
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    83
to the middle element (for this use \texttt{sortBy}).
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    84
445
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    85
\subsection*{Task 5 (Pattern-Matching)}
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    86
b73e7ce91c10 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 444
diff changeset
    87
\subsection*{Task 6 (Web-Crawler)}
444
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    88
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    89
Write a pretty print function for lists of integers which
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    90
``condenses'' elements in the list, meaning if there is a number
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    91
several times in a row, then print out \mbox{\texttt{n x e}}, where
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    92
\texttt{n} is the number of repetitions and \texttt{e} is the
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    93
number. For example
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    94
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    95
\begin{lstlisting}[numbers=none]
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    96
  List(1,1,1,2,3,3)    =>   List(3 x 1, 2, 2 x 3)
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    97
  List(1,2,3,4,4,4)    =>   List(1, 2, 3, 3 x 4)
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    98
  List(1,1,1,1,1,1)    =>   List(6 x 1)
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
    99
  List(1,1,1,2,1,1)    =>   List(3 x 1, 2, 2 x 1)
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
   100
\end{lstlisting}
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
   101
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
   102
You might like to define a separate function that first counts the occurences
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
   103
for each element and returns a list of (Int, Int)-pairs .
7a0735db4788 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 442
diff changeset
   104
123
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   105
\end{document}
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   106
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   107
%%% Local Variables: 
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   108
%%% mode: latex
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   109
%%% TeX-master: t
556cd74cbba9 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   110
%%% End: