我正在尝试学习Haskell,所以我决定编写一个简单的程序来模拟行星绕太阳运行的轨道,但我在从模拟中打印出坐标时遇到了问题。我的代码中顶层函数如下:
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
主函数 = do let 行星 = 运行模拟 [地球,太阳] 100 0.05 打印 行星
“Body”只是一个数据类型,它保存了行星的位置、速度等信息,因此第一个参数只是模拟中行星的列表,其他参数分别是要集成的步数和时间步长。我的问题是,我如何修改代码以在每次调用runsim后打印所有body的位置?我尝试向传递给map的组合函数中添加“printInfo”函数,如下所示:
printInfo :: Body -> Body
printInfo b = do
putStrLn b
b
但是它无法编译,有人能给我一些提示吗?谢谢!