• Keine Ergebnisse gefunden

1.1 Fingerübung für NSA Mitarbeiter 8 Punkte

N/A
N/A
Protected

Academic year: 2022

Aktie "1.1 Fingerübung für NSA Mitarbeiter 8 Punkte"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Reaktive Programmierung SoSe 14

1. Übungsblatt

Ausgabe: 29.04.14 Abgabe: 13.05.14

Christoph Lüth Martin Ring

Dieses Übungsblatt basiert auf den Inhalten der Vorlesungen vom 29. April sowie vom 6. Mai. Wenn Sie also zunächst bei der Lösung gar nicht weiter kommen, verzweifeln Sie nicht sondern warten sie die zweite Vorlesung ab.

Wir empfehlen die Scala-IDE (http://scala-ide.org/download/sdk.html) zur Bearbeitung.

1.1 Fingerübung für NSA Mitarbeiter 8 Punkte

In der Veranstaltungsbeschreibung haben wir versprochen, dass die Veranstaltung Sie für die NSA qua- lifiziert. Jeder NSA Agent zerlegt vor dem Frühstück 1000 Zahlen in ihre Primfaktoren, das sollten Sie auch beherrschen:

Schreiben Sie die beiden FunktionenisPrimeundprimeFactors: def i s P r i m e ( i n t : I n t ) : Boolean = ? ? ?

def p r i m e F a c t o r s ( i n t : I n t ) : L i s t [ I n t ] = ? ? ?

Nutzen sie nun ihre Implementation vonisPrimeum die FunktionprimeFactorszu überprüfen. Fol- gendes sollte für allex≥1 gelten:

( p r i m e F a c t o r s ( x ) == Nil ) == ( x == 1 ) p r i m e F a c t o r s ( x ) . f o r a l l ( i s P r i m e ) p r i m e F a c t o r s ( x ) . product = x

Anmerkung: Die Zeilen mit dem???kompilieren tatsächlich so.???ist in der Standardbücherei defi- niert und hat den TypNothing(Untertyp von allen anderen Typen). bei der Ausführung fliegt uns das natürlich um die Ohren.

1.2 Pimp my Int 4 Punkte

Ein beliebtes Muster in Scala ist das sogenanntePimp-My-Library-Pattern. Durch eine implizite Konver- sion (Ein zunächst gewöhnungsbedürftiges Scala Feature) kann ein bestehender Typverwandeltwerden.

Das funktioniert so: Bei einem Typfehler gibt der Scala Compiler nicht gleich auf, sondern sucht nach (im aktuellen Kontext sichtbaren) Methoden die mit dem Modifierimplicitmarkiert sind. Wenn genau eine dieser Methoden dazu geeignet ist, den Typfehler zu lösen, wird sie auf den falsch getypten Ausdruck angewandt. Auf diese Weise ist es möglich, zusätzliche eigene Methoden auf bestehenden Typen zu definieren oder bestehende Typen von inkompatiblen Bibliotheken miteinander kompatibel zu machen.

Ein Beispiel:

o b j e c t Example extends App {

import s c a l a . language . i m p l i c i t C o n v e r s i o n s c l a s s PimpedString ( underlying : S t r i n g ) {

def makeImportant =

underlying . toUpperCase + " ! ! ! 1 1 1 oneone "

}

i m p l i c i t def s t r i n g T o P i m p e d S t r i n g ( value : S t r i n g ) = new PimpedString ( value ) p r i n t l n ( " h a l l o " . makeImportant ) / / > HALLO! ! ! 1 1 1 o n e o n e

}

Benutzen sie das Pattern um die FunktionenisPrimeundprimeFactors(beide diesmal ohne Parame- ter) aufIntzu definieren.

1

(2)

Revision –revision– vom 2014-04-29

1.3 Text Mining Light 8 Punkte

Neben der Primfaktorzerlegung verbringt ein NSA Agent die meiste Zeit damit in fremden Dokumen- ten herumzuschnüffeln. Damit das effizienter funktioniert, definieren sie einen Algebraischen Datentyp TextElement zur Repräsentation von Dokumenten. Der Typ sollte Überschriften, Formatierung (Fett, Kursiv, Unterstrichen), Absätze, Listen und Hyperlinks in beliebiger Verschachtelung unterstützen.

Definieren sie nun folgende rekursive Funktionen:

/∗∗

∗ Gibt das Dokument f o r m a t i e r t auf d i e Konsole aus . Formatierungen können S i e

∗ dabei t e x t u e l l markieren . ( z . B . "∗ ∗F e t t e r Text∗ ∗" ) V e r s c h a c h t e l t e

∗ Absätze s o l l e n E i n g e r ü c k t werden .

∗/

def p r e t t y P r i n t ( doc : TextElement ) = ? ? ? /∗∗

∗ Sucht a l l e Links aus dem Dokument heraus und g i b t s i e a l s L i s t e zurück .

∗/

def g e t H y p e r l i n k s ( doc : TextElement ) : L i s t [ S t r i n g ] = ? ? ? /∗∗

∗ B r i n g t a l l e Elemente auf e i n e e i n z i g e V e r sc h a c ht e l un g s e be n e . ( Eine L i s t e von

∗ Elementen d i e k e i n e w e i t e r e n L i s t e n von Elementen e n t h ä l t )

∗/

def f l a t t e n ( doc : TextElement ) : TextElement = ? ? ? /∗∗

∗ S o r t i e r t a l l e L i s t e n a u f s t e i g e n d a l p h a b e t i s c h und g i b t das Dokument ansonsten

∗ unverändert zurück .

∗/

def s o r t L i s t s ( doc : TextElement ) : TextElement = ? ? ?

2

Referenzen

ÄHNLICHE DOKUMENTE

Sein In- halt wird um einen Wert zwischen 0 und einschließlich 31 nach rechts verschoben, je nach dem Wert der fünf am wenigsten signifikanten Bits des obersten Stapelworts

c) Als Faustregel gilt, dass eine Trennung vollständig ist, wenn der Trennfaktor R mindestens 2 beträgt. Wird diese Bedingung für die Peaks 3 und 4 erfüllt? Welche Massnahmen kann

Kleine Unterschiede in ihren führten dazu, dass einige Finken etwas rundere, andere etwas spitzere hatten.. Die einen waren etwas besser darin, zu knacken,

Bei einem Leistungsmarsch wird die Startzeit auf Stunden und Minuten genau in der Form hh.mm festgehalten, ebenso die Ankunftszeit im Ziel.. Nun bestimmt jemand mit

Technische Universit¨ at Berlin Fakult¨ at II.. Institut f¨ ur Mathematik

[r]

Faser- oder Blättchenaggregate, deren Teilchen eine Richtung parallel haben, im übrigen zueinander gedreht liegen, geben natürlich denselben Röntgenelfekt, den man durch Drehen

Faser- oder Blättchenaggregate, deren Teilchen eine Richtung parallel haben, im übrigen zueinander gedreht liegen, geben natürlich denselben Röntgenelfekt, den man durch Drehen