Ho appena iniziato a insegnarmi Haskell. Questo codice dovrebbe fare il primo fattorizzazione:Haskell - definizione di una funzione con guardie all'interno di un 'dove'
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)
ottengo un errore di analisi sulla linea commentato. Penso che il mio problema potrebbe essere che lowestDivisorHelper
ha guardie, ma il compilatore non sa se le guardie appartengono a lowestDivisorHelper
o lowestDivisor
. Come faccio a evitare questo?
Modifica: devo aggiungere che non volevo definire la funzione di supporto al livello superiore per nascondere i dettagli dell'implementazione. L'importazione del file non dovrebbe portare con sé la funzione di supporto.
"L'importazione del file non dovrebbe portare con sé la funzione di supporto." In questo caso, non esportarlo. –