www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Haskell" - Haskell: Liste mit Tupel
Haskell: Liste mit Tupel < Haskell < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Haskell"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Haskell: Liste mit Tupel: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:03 So 12.10.2008
Autor: haski

Aufgabe
Gegeben: eine Liste von Tupel der Form [(a,b)]
Ich möchte das zweite Element des Tupels für alle Tupel in der Liste prüfen, ob es einen bestimmten Eintrag hat. Sobald es in der Liste ein Tupel gibt, dass einem bestimmten Eintrag besitzt soll True ausgegeben werden, wenn nicht, dann False

Ich habe folgende dazu ausgedacht:

type Model = [(Int, LFlag)]
data LFlag = Nd | D deriving (Eq, Show)

checkModel :: Model -> Maybe Bool
checkModel ((i, flag) : _) | snd (i, flag) == D = Just True
checkModel (tup : tupl) = checkModel(tup) || checkModel(tupl)

es prüft nur das erste Element (Tupel) in der Liste nach dem flag "D", aber was ist wenn es nicht im ersten Tupel auftaucht?

Ich hoffe jemand kann mir helfen.
Viele Grüße und danke im Voraus

Haski


Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Haskell: Liste mit Tupel: Antwort
Status: (Antwort) fertig Status 
Datum: 15:40 So 12.10.2008
Autor: Martin243

Hallo,

also mein Haskell-Interpreter frisst das nicht. Also erstmal einige fragen:
Warum ist der Ergebnistyp ein Maybe ... ?
Warum benutzt du snd, wo du durch dein Pattern Matching eh schon das zweite Element benannt hast?
Weißt du, dass beide Patterns dasselbe testen und deshalb nur das erste zum Zuge kommt?
Wo ist denn deine Rekursionsbasis, sprich: Wo wird denn die leere Liste verarbeitet? Was wäre denn das Ergebnis bei einer leeren Liste?
Kannst du deine Funktion wirklich rekursiv sowohl auf ein Paar als auch auf eine Liste von Paaren anwenden? Meckert da dein Interpreter nicht?

Mach dir mal ein paar Gedanken dazu. Ich denke, wenn du alle Fragen beantwortet hast, bist du dem Ziel ziemlich nah. Du kannst ja immer noch nachfragen.


Gruß
Martin


Bezug
        
Bezug
Haskell: Liste mit Tupel: TeilLösung
Status: (Frage) beantwortet Status 
Datum: 19:35 So 12.10.2008
Autor: haski

Laut Martin frisst der Interpreter schonmal das was ich geschrieben habe.
Die Lösung ist aber unbefriedigend, da es nur für eine Liste mit zwei Tupel-Elementen funktioniert.
Um die Frage von Martin zu beantworten wegen dem "Maybe": ich wollte bei einer leeren Liste "Nothing" zurückgeben.
Jetzt meine Teillösung:

type Model = [(Int, LFlag)]
data LFlag = Nd | D deriving (Eq, Show)

checkModel :: Model ->Maybe Bool
checkModel [] = Nothing
checkModel [(i, flag)] =  if (i, flag) == (i, D) then Just True
else Just False
checkModel [x, y] = case (checkModel [x]) of
Just True -> Just True
Just False -> checkModel [y]

Vielleicht kann mir jemand sagen wie ich für alle Elemente in der Liste prüfen kann. Die Liste besteht aus endlich vielen Tupel, deren zweites Element gematcht werden soll, wohlgemerkt.

Viele Grüße
HASKI

Bezug
                
Bezug
Haskell: Liste mit Tupel: Antwort
Status: (Antwort) fertig Status 
Datum: 20:20 So 12.10.2008
Autor: Martin243

Hallo,

> Laut Martin frisst der Interpreter schonmal das was ich geschrieben habe.

Nein, das habe ich nie behauptet.

> Um die Frage von Martin zu beantworten wegen dem "Maybe": ich wollte bei einer leeren Liste "Nothing" zurückgeben.

Ich weiß nicht, ob man hier tatsächlich zu Maybe greifen muss. Wenn die Liste leer ist, dann enthält sie auch kein Paar, dessen zweiter Eintrag mit irgendetwas übereinstimmt. Also kannst du da einfach False zurückgeben und alles ist einheitlich geregelt ohne auf Monaden zurückgreifen zu müssen.
Wenn du dennoch Maybe haben willst, dann brauchst du eine Hilfsfunktion, die anspringt, wenn die Liste nicht leer ist. Dort machst du ein einfaches Pattern Matching:
1. Fall: einelementige Liste
2. Fall: beliebige Liste mit Kopf und Rumpf, wobei auf Rumpf rekursiv weitergearbeitet wird.

Wenn du auf das Maybe verzichtest, dann sind es zwei Zeilen, sonst vielleicht vier.


Gruß
Martin

Bezug
                        
Bezug
Haskell: Liste mit Tupel: Lösung gefunden
Status: (Frage) beantwortet Status 
Datum: 20:37 So 12.10.2008
Autor: haski

Wenn ich eine leere Liste habe, dann brauche ich auch nicht nach dem Flag "D" zu matchen, von daher ist "Maybe" eigentlich überflüssig

type Model = [(Int, LFlag)]
data LFlag = Nd | D deriving (Eq, Show)

checkModel :: Model -> Bool
--checkModel [] = Nothing
checkModel [(i, flag)] =  if (i, flag) == (i, D) then True
else False
checkModel ((i, flag) : y) = case (checkModel [(i, flag)] ) of
True -> True
False -> checkModel y

ich danke Maritn an dieser Stelle, wegen seinen Tipps.
Viele Grüße
Haski

Bezug
                                
Bezug
Haskell: Liste mit Tupel: Antwort
Status: (Antwort) fertig Status 
Datum: 20:48 So 12.10.2008
Autor: Martin243

Hallo,

ok, das mit dem Maybe war mir auch irgendwie ein Dorn im Auge. Jetzt, wo es geklappt hat, will ich auch meine Lösung präsentieren:
checkModel ((_, b) : tupl) = b==D || checkModel tupl
checkModel [] = False

Aber wie man es macht, ist letzten Ende egal.


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Haskell"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de