首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell中的冻融阵列

Haskell中的冻融阵列
EN

Stack Overflow用户
提问于 2015-06-04 20:39:59
回答 2查看 560关注 0票数 2

我正在进行一个项目,其中包括从Haskell的数组中进行读写。我希望将数组存储在不可变的数组类型中(因为我希望尽可能避免易变性),所以我正在使用freezethaw函数作为MArray的函数。不过,我对如何使用这些函数感到困惑。这就是我所拥有的(不是编译的):

代码语言:javascript
复制
modifyBoard bd = freeze mbd 
where 
    t = view falling st
    ps = extractLocs t
    mbd = runSTArray $ do
     a <- thaw bd
     mapM_ (\xy -> writeArray mbd xy (Filled t)) ps
     return a

我不应该以这种方式使用数组,或者如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-04 23:30:10

它应该与几个更改一起工作:

1.)修改解冻后的a,而不是未解冻的bd

2.)没有必要在runSTArray后再冻.您返回的结果已经冻结。

代码语言:javascript
复制
modifyBoard bd = mbd 
    where 
        t = view falling st
        ps = extractLocs t
        mbd = runSTArray $ do
            a <- thaw bd
            mapM_ (\xy -> writeArray a xy (Filled t)) ps
            return a
票数 4
EN

Stack Overflow用户

发布于 2015-06-05 01:52:15

jhickner的回答是正确的,但似乎您只是简单地重新发明了(//) (它的实现非常类似于您编写它的方式):

代码语言:javascript
复制
modifyBoard bd = bd // map (\xy -> (xy, Filled t)) ps
    where t = ...
          ps = ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30653727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档