在Haskell中如何生成任意数量的可变数组并存储到Vector中
适配动态N生成可变数组的实现方案
核心思路
你原来的代码是硬编码生成4个可变数组,只需要用Monad下的重复执行工具replicateM替换硬编码的四次创建操作,再同步调整循环边界即可:
- 用
replicateM接收参数N,重复执行N次newMArray创建操作,自动收集生成的可变数组为列表 - 将列表转为Vector后,循环边界从固定的
<=3改为<N适配动态长度
完整实现代码
依赖导入
import qualified Data.Vector as V import Control.Monad (replicateM, loopM) -- 以下为原代码用到的massiv库相关导入,可按实际依赖调整 import Data.Massiv.Array.Mutable (newMArray, modifyM_, Sz(..), Ix1(..))
函数实现
fn :: Int -> IO () fn n | n <= 0 = error "参数n必须为正整数" | otherwise = do arrList <- replicateM n $ newMArray (Sz1 1) 0 let vls = V.fromList arrList loopM 0 (< n) (+1) (\k -> modifyM_ (vls V.! k) (+1) 0)
补充说明
- 如果你使用的MArray运行在ST monad而非IO下,仅需调整函数签名即可,核心逻辑完全一致
- 若不需要严格的参数校验,可直接去掉守卫分支,保留do块逻辑即可
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

