Angenommen, ich habe die folgende Funktionspeichern Variable und verwenden Sie es auf Rekursion
printVariance :: [Float] -> IO()
printVariance [] = return()
printVariance (x:xs)
| x >= avg (x:xs) = print (x - avg (x:xs)) >> printVariance xs
| otherwise = printVariance xs
, die eine Liste erhält, prüft, welche Elemente größer sind als der Durchschnitt und druckt ihre value - avg
.
Mein Problem ist, dass der Wert avg
jeden Schritt ändert. Wie kann ich es nur einmal definieren und seinen Wert für die Rekursion verwenden?
Sie können dies mit Falten und Karten neu schreiben, anstatt direkt zu rekursiv. Dies würde es Ihnen ermöglichen, eine 'where' oder eine' let' Bindung anzuhängen, wobei Sie Ihren 'avg' als etwas definieren würden, das den Linien' (foldr (+) 0 xs)/length xs' entspricht. – Michail