Haskell simple Listen-Aufgabe

Farbenfroh

Mitglied
Hallo!
Ich hoffe es ist nicht verwerflich, hier eine Frage zu einer anderen Programmiersprache zu stellen, aber ich finde einfach keine sonstige Hilfe im Bereich Haskell!

Und zwar:
Wir haben seit einer Woche Haskell, d.h. erst eine Vorlesung dazu gehabt. Ich habe auch 5 Übungsaufgaben hinbekommen aber bei der letzten stehe ich leider auf dem Schlauch:

Aufgabe: Eine Liste mit 11 Elementen wird aufgerufen
Code:
punktzahl [2,2,0,0,0,1,1,2,2,2,0]

Wenn diese Liste
1. mindestens 5x eine Zwei enthält
2. UND mindestens 7x einen Eintrag >0 hat
soll True ausgeworfen werden.

d.h.:
Code:
punktzahl [2,2,0,0,0,1,1,2,2,2,0]
liefert True

Code:
punktzahl [2,2,0,0,0,1,0,2,2,2,0]
liefert False (zwar ist 5x 2 dabei aber insg nur 6 Einträge >0)

Mein bisheriger Ansatz war:
Code:
punktzahl :: [Int] -> Bool
punktzahl (x:xs)= sum(x:xs)>11

Nun ist mir aber der Fehler aufgefallen, dass es nicht reicht zu überprüfen, ob die Summe der Listenelemente >11 ist, bei [2,2,2,2,2,1,1,0,0,0,0] funktioniert das zwar, bei [2,2,2,2,2,2,0,0,0,0,0] jedoch kommt auch >11 raus, allerdings ist Punkt 2 nicht erfüllt (mind 7 Elemente >0).

Hier fehlt mir also eine Art Counter, der guckt, ob mindestens 7 Elemente >0 dabei waren.

Und ich habe keine Ahnung wie ich das in Haskell implementieren kann, da wir wie gesagt erst 90 Minuten Vorlesung dazu hatten. In Java wärs in Sekunden erledigt ^^

Das müsste irgendwie Rekursiv funktionieren:
Ich gucke mir die Liste punktzahl (x:xs) an. Wenn x >0 incrementiere ich die Variable "count" und addiere den x-Wert zur Variablen "summe" hinzu. Nun ersetze ich den Kopf "x" mit dem nächsten Elemente der Liste und rufe die Funktion damit erneut auf. Das ganze so lange bis kein Element mehr in der Liste ist.

Bitte um Hilfe und Hinweise wie ich das implementieren kann!
 

Thunderstorm

Mitglied
Hallo,

leg dir eine zusätzliche Funktion an, die die gewünschten Zähler hat. Die Hauptfunktiion ruft diese auf und gibt deren Resultat wieder. Hier ein kleines Grundgerüst.

help :: [Int] -> int -> int -> Bool
help [] _ _
help (x:xs) y1 y2

Falls du es nicht schaffst, schreib mir eine PM, da das hier ein Java Forum :toll:

lg Thunder

PS : Was wolltest du hiermit bezwecken punktzahl (x:xs)= sum(x:xs)>11 ???:L
 
Zuletzt bearbeitet:

Neue Themen


Oben