【发布时间】:2009-09-20 21:32:43
【问题描述】:
我正在尝试学习 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
main = do
let planets = runSim [earth, sun] 100 0.05
print planets
“Body”只是一个保存行星位置、速度等的数据类型,所以第一个参数只是模拟中的行星列表,其他参数是积分步数和时间步长大小分别。我的问题是,如何修改代码以在每次调用 runsim 后打印出所有主体的位置?我尝试向传递给 map 的组合函数添加一个“printInfo”函数,如下所示:
printInfo :: Body -> Body
printInfo b = do
putStrLn b
b
但它不能编译,谁能给我一些提示?
谢谢!
【问题讨论】: