Haskell - Definieren einer Funktion mit Wachen innerhalb eines "Wo"
Ich fange gerade damit an, mir selbst Haskell beizubringen. Dieser Code soll die Primfaktorisierung durchführen:
divides :: Integer -> Integer -> Bool
divides small big = (big `mod` small == 0)
lowestDivisor :: Integer -> Integer
lowestDivisor n = lowestDivisorHelper 2 n
where lowestDivisorHelper m n
| (m `divides` n) = m -- these should belong to lowestDivisorHelper
| otherwise = lowestDivisorHelper (m+1) n
primeFactors :: Integer -> [Integer]
primeFactors 1 = []
primeFactors n
| n < 1 = error "Must be positive"
| otherwise = let m = lowestDivisor n
in m:primeFactors (n/m)
In der kommentierten Zeile wird ein Analysefehler angezeigt. Ich denke mein Problem könnte das seinlowestDivisorHelper
hat Wachen, aber der Compiler weiß nicht, ob die Wachen dazu gehörenlowestDivisorHelper
oderlowestDivisor
. Wie komme ich darum herum?
Ich sollte hinzufügen, dass ich die Hilfsfunktion nicht auf der obersten Ebene definieren wollte, um die Implementierungsdetails zu verbergen. Das Importieren der Datei sollte nicht die Hilfsfunktion mit sich bringen.