Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 2 von 2 Treffern
Autor Beitrag
Thema: Module in Haskell/ Funktionen höherer Ordnungen
bavario

Antworten: 0
Hits: 2.437
Module in Haskell/ Funktionen höherer Ordnungen 20.05.2018 14:30 Forum: Praktische Informatik


Hallo zusammen,

ich sitze vor einer Übungsaufgabe und weis nicht mehr weiter.

Es geht um folgendes:
Ein Register ordnet jedem Student einen Bonus zu. Ein Bonus ist entweder eine Liste von erzielten Hausaufgabenpunkten oder der Vermerk, dass der Student mindestens einmal abge- schrieben hat.
Vervollständigen Sie die Implementation durch Bearbeitung der vier mit –TODO— mar- kierten Stellen. Die Funktion punkteAuslesen soll die Summe der erzielten Hausauf- gabenpunkte fu r den abgefragten Studenten liefern; ist der Student unbekannt oder ein bekannter Abschreiber, so soll 0 geliefert werden. eintragAbschreiber soll den Eintrag des Studenten auf Abschreiber setzen; alle eventuell bis dahin erzielten Bonuspunkte verfallen. eintragPunkte fu gt einem Eintrag eines Studenten die angegebenen Punk- te hinzu; dabei sollen zur Protokollierung die Punkte nicht sofort aufaddiert werden, sondern die Liste mit Punkten einfach um einen Eintrag erweitert werden; unbekannte Studenten sollen neu angelegt werden; Abschreiber du rfen keine Punkte mehr sammeln und bleiben Abschreiber

Nun zur Lösung der Aufgabe:

module Bonus (eintragPunkte, eintragAbschreiber, punkteAuslesen, leer) where
import qualified Data.Map as Map

data Bonus = Punkte [Int] | Abschreiber
type Student = String
type Register = Map.Map Student Bonus

leer :: Register
leer = Map.empty

punkteAuslesen :: Student -> Register -> Int
punkteAuslesen = undefined --TODO

eintragAbschreiber :: Student -> Register -> Register
eintragAbschreiber = undefined --TODO

eintragPunkte :: Student -> Int -> Register -> Register
eintragPunkte student x register = Map.insert student x register

Und zur Frage:
Was bedeutet bei dem Typ register dieses Map.Map?
Zum Beispiel bei der Funktion eintragPunkte, welche einen student als String, die Punkte als Int und ein register bekommt soll nun die Punkte in das Register mit dem String des Studenten als Key in die Map schreiben.
Also Map.insert student x register, aber wie genau ist das register hier als Typ zu verstehen? Also was braucht Map.insert außer dem String und der Punkte noch? Vielleicht auch in dem Zusammenhang: Was ist der Unterschied zwischen type und data? (newtype = type?)
Ich verstehe es nicht und wäre für Hilfe dankbar, da sich mein Compiler immer beschwert, egal was ich probiere.

Es geht mir nicht darum, dass jemand meine Aufgaben löst, wäre nur toll wenn in diesem Punkt jemand Licht ins Dunkle bringe könnte Zunge raus

Beste Grüße
Bavario Wink
Thema: Hoare Logik (Gültigkeit von Triple beweisen)
bavario

Antworten: 0
Hits: 3.568
Hoare Logik (Gültigkeit von Triple beweisen) 14.11.2017 12:01 Forum: Logik


Hallo zusammen. Ich steige noch nicht ganz hinter die Hoare Logik und habe hier ein paar Beispiele die ich nicht verstehe, vielleicht kann mir einer von euch ja weiter helfen? Beweisen Sie oder widerlegen Sie folgende Hoare-Triple:

1. {a > 7 und b >= 0} n = a - b {n < a und a + b >= 0}
Das müsste mit der Zuweisungsregel zu machen sein
Bzw ist das Tripple nicht gültig, da wenn a = 7 und b = 0 in der Vorbedingung gilt, gilt aber die Nachbedingung nicht, da n = 7 und 7 nicht echt kleiner 7 ist.

2.{x >= y + 1 und y ist gerade} z=x+2; x=x+y+z; {x gerade}
Da spielt die Hintereinanderausführung auf jeden Fall eine Rolle, aber wie wende ich das genau an? Welche Invariante wähle ich hier um ans Ziel zu gelangen?

3.{ x >= y + 1 und ygerade} if(0 != y%2){x=x+y;}else{z=x+2;x=x+y+z;}{ x gerade} Hier natürlich die if-Regel

Wäre toll wenn mir dabei jemand weiter helfen kann.
Beste Grüße
Zeige Beiträge 1 bis 2 von 2 Treffern