curried sort

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.

curried sort
Hallo,

hat jemand die Lösung zur Aufgabe 11.3 h) vom Blatt? Ich komme gerade nicht weiter…
Als Signatur habe ich gedacht:

def curriedSort: (((A, A) => Boolean ) => List[Any]) => List[Any] =


Verwende doch die konkreten Typen Int und List[Int], die in der Aufgabenstellung genannt sind. Dann klappt das schon…


mmmh nein leider noch nicht …

zu Listgeneratoren habe ich auch noch eine Frage:

Wo ist hier der Fehler:
def map: (Int => Int) => List[Int] => List[Int] = f => xs => for(a <-xs yield f(a))

wäre cool, wenn mir jemand weiterhelfen kann :slight_smile:


Der Compiler sagt es dir:
[m]
:1: error: ‚)‘ expected but ‚yield‘ found.
def map: (Int => Int) => List[Int] => List[Int] = f => xs => for(a <-xs yield f(a))
^
[/m]
Es sollte wohl heißen:
[m]
def map: (Int => Int) => List[Int] => List[Int] = f => xs => for(a <-xs) yield f(a)
[/m]


ah stimmt, danke! kannst du mir vllt noch bei der curriedSort helfen?


Ich kann es versuchen: Am nächsten Mittwoch bin ich ca. 8:15 bis 10:00 im H11 und kann mal einen Blick drauf werfen… du wirst mich dort nicht übersehen :wink:


Was hast du denn bisher bei der [m]curriedSort[/m] bzw. wo hängt es? Im Prinzip geht es ja nur darum, auf der übergebenen Liste die [m]sortWith[/m]-Methode mit der ebenfalls übergebenen Richtungsfunktion aufzurufen.


Die Funktion müsste folgendermaßen aussehen:

def curriedSort[A]: ((A, A) => Boolean) => List[A] => List[A] =
  order => list => list.sortWith(order)

In deiner Variante gibt es zwei Probleme mit der Signatur:

  1. Wenn die Vergleichsfunktion Objekte vom Typ A vergleicht, sollten deine Listen auch Objekte vom Typ A enthalten, nicht Any-Objekte. Jedes Objekt ist eine Instanz der Klasse Any, ähnlich wie in Java jedes Objekt eine Instanz der Klasse Object ist.
  2. Die Funktion curriedSort wie von dir implementiert (Außer mit List[A] anstatt von List[Any]) nimmt einen Parameter vom Typ “((A, A) => Boolean ) => List[A]” und gibt einen Wert vom Typ “List[A]” zurück. Eigentlich sollte die Funktion einen Parameter vom Typ “(A, A) => Boolean” nehmen, danach einen Parameter vom Typ “List[A]” und einen Wert vom Type List[A] zurückgeben. Der Fehler liegt in der Klammerung der Parameter.
def curriedSort:
  (((A, A) => Boolean ) => List[Any]) =>  // 1. Parameter
  List[Any] = ...

Ohne die Klammer und mit richtigen Typen wird daraus:

def curriedSort:
  ((A, A) => Boolean) =>  // 1. Parameter
  List[A] =>              // 2. Parameter
  List[A] = ...