2016-03-29 16 views
-1
smallestNumberH (x:xs) n = if(xs==[])then n else (if(x<n) then smallestNumberH xs x else smallestNumberH xs n) 
smallestNumber (x:xs) = smallestNumberH (x:xs) x 
countmin::[Int]->Int 
countmin l:ls = if (ls==[]) then 0 else (if(l==smallestNumber ls) then (1 + countmin ls) else (countmin ls)) 

Es sagt "Parse Fehler in Muster: Countmin". Ich habe versucht, l: neben ls hinzuzufügen, aber es funktioniert nicht.Haskell sagt Parse-Fehler

+1

Sie haben auch einige nicht erschöpfende Muster. Versuchen Sie, mit "-Wall" zu kompilieren, um diese zu sehen, bevor sie Laufzeitfehler verursachen. –

+0

Wenn Sie möchten, dass Ihre Hilfsfunktion nur den Fall behandelt, in dem es mindestens ein Element gibt, machen Sie dieses Element zu einem separaten Argument für die Hilfsfunktion, damit klar ist, dass es immer da ist. Ihre Hauptfunktion sollte den leeren Fall irgendwie behandeln. – dfeuer

+0

Mögliches Duplikat von [Haskell: Parse-Fehler im Muster] (https://stackoverflow.com/questions/8561762/haskell-parse-error-in-pattern) –

Antwort

1

Sie fehlen Klammern um Ihren Mustervergleich für countmin. Ändern Sie es zu:

countmin (l:ls) = ... 
+0

Ich habe es versucht. Arbeitet immer noch nicht für mich. Das habe ich schon probiert. – gprex

+1

Es funktioniert hier: http://rextester.com/KHHM55458. Alles, was geändert wurde, sind die Klammern um '(l: ls)' –

+0

Gut funktioniert es nicht auf leeren Listen, wenn das die einzige Änderung ist, die Sie machen. – amalloy