You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:45:03