Sechste Hausübung online

Benutzeravatar
sewe
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 295
Registriert: 16. Jan 2009 14:53
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von sewe »

Da die Frage aufkam, warum fold sich anders bzgl. Laziness verhält als nub, d.h., nicht bereits Teilergebnisse liefert: das hängt ganz von der als Operator verwendeten Liste ab. Im Beispiel, das in der Übung betrachtet wurde, ist das allerdings so; die (duplikatfreie) Ergebnisliste steht erst am Schluss der Auswertung "am Stück" zur Verfügung.

Als vereinfachtes Bespiel (habe (:) statt (++) benutzt, da es auf die Reihenfolge der Element im Resultat nicht wirklich ankommt) kann folgender Ausdruck dienen:

Code: Alles auswählen

foldl (\as b -> if b `elem` as then as else b:as) [] [1, 2, 1]
Dieser expandiert (unter freier Interpretation des Backtick-Operators) zu:

Code: Alles auswählen

((([] `\as b -> if b `elem` as then as else b:as` 1)
      `\as' b' -> if b' `elem` as' then as' else b':as'` 2)
      `\as'' b'' -> if b'' `elem` as'' then as'' else b'':as''` 1)
Die Evaluation wird nun gemäß der Klammerung zuerst in der untersten Zeile erzwungen: b'' ist offensichtlich 1 aber über den Wert von as'' kann man noch nichts sagen; dazu muss erst der Teilausdruck in den Zeilen 1-2 zumindest partiell ausgewertet werden. Zumindest partiell deshalb, weil b'' `elem` as'' (wenn as'' nicht leer ist) frühestens nach dem ersten Element mit einem Treffer abbrechen kann. Hier wiederholt sich das Spiel und der Teilausdruck in Zeile 1 wird ausgewertet (zu [1]).

Wenn man nun bedenkt, dass alle Listenelemente von der Konsole stammen, ist klar, dass Fold (ob foldl oder foldr ist hier egal) hier kein Ergebnis liefern kann, bevor nicht die gesamte Eingabe getätigt wurde, d.h., die gesamte Liste bekannt ist.

Hoffe, das bringt etwas Licht ins Dunkel.

Andreas T.
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 18. Okt 2006 00:18
Wohnort: Darmstadt

Re: Sechste Hausübung online

Beitrag von Andreas T. »

Bei uns fehlt noch die Bewertung von Übung 6. Soll das so sein? ;-)

Benutzeravatar
sewe
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 295
Registriert: 16. Jan 2009 14:53
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von sewe »

Andreas T. hat geschrieben:Bei uns fehlt noch die Bewertung von Übung 6. Soll das so sein? ;-)
Soll nicht. Ist aber so. ;-)

War leider bis gestern krank; hole das heute nach.

Benutzeravatar
sewe
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 295
Registriert: 16. Jan 2009 14:53
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von sewe »

Punkte sind jetzt im SVN.

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von yourmaninamsterdam »

Ich möchte zu Protokoll geben, dass ich es -- gerade bei der (mangelnden) Klarheit der Aufgabenstellung, für nicht angemessen halte, 3 Punkte für das interaktive Verhalten abzuziehen, das ich hier vorher auch noch als korrekt bestätigt bekommen habe.
sewe hat geschrieben:Es ist in der Aufgabenstellung (wie Sie ganz richtig vermutet haben), von Variante 1 die Rede.
yourmaninamsterdam hat geschrieben: Variante 1 (es werden von einer Eingabe nur Wörter ausgegeben, die nicht vorher schonmal gesehen wurden)

Code: Alles auswählen

*Lab8 System.IO> printWords
test me plz

test
me
plz
test me again

again
test me more

more
^CInterrupted.
Wie man hier sieht, beendet eine Leerzeile nicht die Interaktion, sondern nimmt die nächste Eingabe entgegen. Beendet wird es mit STRG+C (sieht man am ^CInterrupt). In der Bewertung steht
In Task 1 soll die Eingabe einer Leerzeile die gesamte Interaktion beenden (wie
":q" in ghci). Ansonsten gut.

The Joker
Erstie
Erstie
Beiträge: 18
Registriert: 29. Sep 2006 20:05

Re: Sechste Hausübung online

Beitrag von The Joker »

yourmaninamsterdam hat vollkommen recht. Mir wurden auch drei Punkte gestrichen, mit der gleichen Begründung, obwohl doch geklärt wurde, dass Variante 1 richtig ist.

Benutzeravatar
sewe
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 295
Registriert: 16. Jan 2009 14:53
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von sewe »

OK, ich gucke es mir morgen noch mal an. Keine Panik.

Benutzeravatar
sewe
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 295
Registriert: 16. Jan 2009 14:53
Kontaktdaten:

Re: Sechste Hausübung online

Beitrag von sewe »

Die Bepunktung von Task 1 wurde im Zuge der Korrektur der siebten Hausübung korrigiert. Einige von Ihnen sollten jetzt 3 Punkte mehr haben.

Antworten

Zurück zu „Archiv“