Ich versuche, Haskell zu lernen, also entschied ich mich, ein einfaches Programm zu schreiben, um die Umlaufbahnen der Planeten um die Sonne zu simulieren, aber ich stieß auf ein Problem beim Ausdrucken der Koordinaten aus der Simulation, die Top-Level-Funktion in meinem Code ist folgende:
runSim :: [Body] -> Integer -> Double -> [Body]
runSim bodys 0 dtparam = bodys
runSim bodys numSteps dtparam = runSim (map (integratePos dtparam . integrateVel dtparam (calculateForce bodys)) (numSteps-1) dtparam
main = do
let planets = runSim [earth, sun] 100 0.05
print planets
Ein "Body" ist nur ein Datentyp, der die Position, Geschwindigkeit usw. eines Planeten enthält, also ist der erste Parameter einfach die Liste der Planeten in der Simulation und die anderen Parameter sind die Anzahl der Schritte zum Integrieren und die Zeitschrittgröße. Meine Frage ist, wie kann ich den Code ändern, um die Position aller Körper nach jedem Aufruf von runsim auszugeben? Ich habe versucht, eine "printInfo" Funktion zu den zusammengesetzten Funktionen hinzuzufügen, die an map übergeben werden, so wie:
printInfo :: Body -> Body
printInfo b = do
putStrLn b
b
aber es kompiliert nicht, kann mir jemand ein paar Hinweise geben?
Danke!