Haskell である種のメイン ループを実装しようとしていますが、CI では次のように記述します。
EntityInteraction *frame(Entity *eList, EntityInteraction *iList) {
parseInteractions(eList, iList);
return simulateEntities(eList);
}
int main() {
Entity eList[] = {...}
EntityInteraction *iList = NULL;
while(true) {
iList = frame(eList, iList);
}
}
そこで、frame を再帰関数にすることで、haskell でこれを複製しようとしました。
frame :: [Entity] -> [EntityInteraction] -> IO ()
frame eList iList = do
frame (parseInteractions iList eList) (simulateEntities eList)
main :: IO ()
main = do
let entList = [...]
frame entList []
しかし、これは予想どおりスタックオーバーフローを引き起こすだけなので、私の質問は、変更可能な状態を使用する haskell でメインループを実行する適切な方法は何ですか?
(私は趣味で C で 4 年間プログラミングしており、haskell を学び始めたばかりです)