Aufgabe 10.8

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 10.8
Dürfen hier wirklich keine Hilfsmethoden (oder die scalamethode reverse) erstellt und verwendet werden?
oder missverstehe ich da die aufgabenstellung:
“Verwenden Sie zur Lösung ausschließlich Rekursion und Mustervergleich auf Listen. Verwenden
Sie zur Bildung neuer Listen lediglich die Listenoperatoren :: bzw. :::”

Raffi


(Eigene) Hilfsfunktionen dürfen natürlich gerne verwendet werden, auch wenn es theoretisch ohne geht. Die Liste umzudrehen dürfte aber, soweit ich das sehe, die Aufgabe nicht einfacher machen.


Darf man von List: apply und length benutzen ?


Die Aufgabenstellung besagt: [quote]
Verwenden Sie zur Lösung ausschließlich Rekursion und Mustervergleich auf Listen. Verwenden
Sie zur Bildung neuer Listen lediglich die Listenoperatoren :: bzw. :::
[/quote]

apply, length und reverse sind somit nicht angezeigt.


Dadurch ist drop oder head als val gespeichert als Hilfe auch verboten oder?


Die Aufgabenstellung besagt:

drop und head sind somit nicht angezeigt.


Wobei du je nachdem, was du tun möchtest diese Funktionen eben gerade durch einen geschickten Mustervergleich ersetzen kannst. Mit Mustervergleichen auf Listen kommt man nämlich sehr einfach an den head, oder an eine Rest/Teilliste.


Mal eine etwas kleinliche Frage: :+ ist aber schon erlaubt oder? ::: wollte mein Compiler nicht hinnehmen und da von hinten durchgegangen werden soll bietet sich das an…


Wenn du bei [m]:::[/m] Fehler vom Compiler erhältst, dann stimmen vermutlich deine Typen nicht. Im Gegensatz zu [m]:+[/m] muss das zweite Argument nämlich eine Liste sein. Zum Beispiel:

scala> List(1,2,3) :+ 4 == List(1,2,3) ::: List(4)
res0: Boolean = true

Damit lässt sich dann die Aufgabe auch implementieren, ohne gegen die Aufgabenstellung zu verstoßen.


Hi, kann mir bitte mal jemand erklären, wie ich Scala in Eclipse benutzen kann! Ich hab das Plugin installiert, die Beispiel.scala-Datei importiert, und dann versucht die Funktionen mit dem Scala Interpreter auszuführen. Wenn ich dann allerdings einen Int eingebe und, dann bekomm ich als Ergebnis den unveränderten Int zurück.


Wie versuchst du denn die Funktion aufzurufen? Versuche es mal beispielsweise mit [m]Beispiel.f(42)[/m].


Hallöchen,
zur “:::”-Funktion nochmal…wie soll man damit einen vernünftigen case basteln (bzw. Listen konkatenieren), hab jetzt schon ein paar versuche gestartet und nichts funzt so richtig. Ich ging am Anfang davon aus, dass ich zum Beispiel in einem mit x::(y::Nil) eine Liste mit den zu vergleichenden Elementen an einen Listenparameter anhänge und nach einem if() statement dann den jeweiligen rekursiven Aufruf mache mit oder ohne konkatenation je nachdem welcher fall und welche condition danach vorliegen soll.
Hab die buntesten Varianten ausprobiert und nichts zieht so richtig.
Mein Ziel war es etwas ähnliches für die cases zu bekommen als wenn man sagen wir mal cases hat die von links beginnen wie beispielsweise x::xs, nur eben mit konkatenation statt vorne einfügen. Es steht entweder Type-mismatch oder nicht Erkennen von “:::” im Weg. Oder es kompiliert und beim Aufruf von mergeList kommt folgende Fehlermeldung
(scala.MatchError: List(1, 2, 3, 3) (of class scala.collection.immutable.$colon$colon)
Wie bekommt für den case eine brauchbare konkatenation für die cases bzw. womit stelle ich sicher, dass ich ‘Listen’ habe wenn die oberen Varianten nicht funktionieren?