gpt4 book ai didi

用于模拟的 Haskell monad

转载 作者:行者123 更新时间:2023-12-02 18:38:35 25 4
gpt4 key购买 nike

表示输入更新状态的最佳方式是什么?

我模拟物理系统。它有状态(坐标、速度)。状态通过从 stdin 获取一些参数(力)的模拟进行更新。每个模拟周期后,结果都会发送到 stdout

程序应在 N 个周期后停止。

我已经用 readIORefwriteIORef 完成了它,但这很丑陋。

最佳答案

一种简单的方法是沿着惰性(可能无限)列表进行 fork ,而不是执行任何显式 IO。

import Control.Monad.State

-- Prerequisites:

data SimState -- coordinates & velocities.
data SimTVParams -- what's read from input. `instance Read`.

initialState :: SimState
simStep :: SimTVParams -> SimState -> SimState
simStateInfo :: SimState -> String

-- How to do the simulation:

main :: IO ()
main = interact $
unlines . map simStateInfo
. simulate initialState
. map read . lines

simulate :: SimState -> [SimTVParams] -> [SimState]
simulate iState = (`evalState` iState) . mapM (state . step)
where step params oldState = (newState, newState)
where newState = simStep params oldState

关于用于模拟的 Haskell monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com