我正在实施Haskell中的UCTalgorithm,这需要相当数量的数据杂耍。 没有太多的细节,这是一个模拟algorithm,在每个“步骤”中,根据一些统计属性selectsearch树中的叶节点,在该叶构build新的子节点,并且与新叶和所有的祖先更新。 考虑到所有这些杂耍,我并不十分清楚如何让整个search树成为一个不可变的数据结构。 相反,我一直在玩ST monad,创build由可变STRef组成的结构。 一个人为的例子(与UCT无关): import Control.Monad import Control.Monad.ST import Data.STRef data STRefPair sab = STRefPair { left :: STRef sa, right :: STRef sb } mkStRefPair :: a -> b -> ST s (STRefPair sab) mkStRefPair ab = do a' <- newSTRef a b' <- newSTRef b return $ STRefPair a' b' derp […]