Beschränkung Haskell Aufgaben

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.

Beschränkung Haskell Aufgaben
Wenns bei den Beschränkungen für die Haskell Aufgaben in der Klausur heißt:

Implementieren Sie folgende Funktionen in Haskell ausschließlich unter der Verwendung
• der Bibliotheksfunktionen (+), (-), (*), map, (:slight_smile: und (==),
• einfacher Rekursion,
• von Lambda-Ausdrücken,
• von Fallunterscheidungen (entweder if-then-else, Wächtern oder Mustervergleich) und
• (explizit oder mittels where) selbstdefinierten Hilfsmethoden.

darf ih dann sowas wie [ x | x ← [1…n], x mod2 == 0 ] verwenden?


Wenn das so beschänkt ist, dann sind Mengenabstraktionen wie dein Beispiel nicht erwünscht.


Ich würde auf erlaubt tippen, siehe Folie 10-54.


Nach längeren Diskussionen im IRC um den Begriff Wächter denke ich nun, dass man mit den beschriebenen Einschränkungen nur Konstrukte im folgenden Stil erlauben wollte (siehe Folie 10-46):

[m]signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1[/m]

Leicht irreführend in den Folien fand ich, dass hier nur von “bewachten Gleichungen” gesprochen wurde und die Begriffe “Wächter” und “Guard” explizit erst später bei den Listengeneratoren fallen.

(Btw., ich sehe auch “mod” nicht unter den erlaubten Bibliotheksfunktionen in diesem Fall ;))

(in einer anderen Klausur lautete die Einschränkung lediglich “Implementieren Sie folgende Funktionen in Haskell ausschließlich unter Verwendung Ihnen aus der Vorlesung bekannten Sprachkonstrukte”, dort wäre dann etwas wie [m][ x | x ← [1…n], x mod 2 == 0 ][/m] (Listengenerator mit Wächter) klar erlaubt.)


Eine Frage noch: also auch wenn das nicht explizit auch mit in der Angabe steht, aber können wir uns eigentlich immer Hilfsfunktionen erstellen, um eine Haskell-Aufgabe zu lösen? Oder dürfen wir das nur, wenns auch mit dasteht (bzw. wenn wir alles aus der Vorlesung verwenden dürfen)?
edit: bzw. dürfen wir auch immer Sachen verwenden, die wir in einer vorherigen Teilaufgabe schon gemacht haben (z.B. reverse bei der Beispielklausur, wo man vorher schon concat implementiert hat…)


Wie John Late schon richtig angemerkt hat: Mit Wächtern sind bewachte Gleichungen gemeint. Mengenabstraktionen sind ja keine Fallunterscheidungen :wink:

@Bomml: Selbst definierte Hilfsmethoden (oder in anderen Teilaufgaben definierte Methoden) sind Prinzipiell erlaubt. Außer es ist bei der Aufgabe explizit anderes angegeben.


Naja, in Haskell Hilfsfunktionen zu verbieten ist irgendwie hirnrissig, nachdem der Kram seiteneffektfrei ist sind Hilfsfunktionen nur eine uebersichtlichere Schreibweise, man koennte auch einfach den Funktionskoerper einsetzen (evtl mit nem Lambda davor).

Und die Mengenschreibweise ist nur eine lustige alternative Syntax fuer filter, und das ist leicht aus einem fold (was eine einfache Rekursion ist) zu basteln.