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

如何用State Monad与可变Vector实现Alphametics谜题求解?

Alphametics谜题求解程序开发求助

我正在开发Alphametics谜题求解程序,计划采用带记忆化的回溯法,用State Monad结合可变Vector实现。目前算法逻辑已经确定,但在实现字母数字赋值的部分遇到了困难,当前代码存在编译错误,请求帮助解决。

Alphametics谜题说明

Alphametics谜题是将一组单词以竖式加法形式呈现,需要把字母替换成十进制数字,让加法等式成立。示例:

SEND
MORE
-----
MONEY

唯一解为:

9567
1085
-----
10652

算法步骤

  • 若超出和的最左侧数字:无进位则返回true,否则返回false,同时检查和不能有前置零。
  • 若当前处理的是加数,且列索引超出当前行长度:递归处理下一行。
  • 若当前是加数中未赋值的字符:遍历所有未使用的数字,尝试赋值后递归,成功则返回true,失败则回溯。
  • 若当前是和中的字符:已赋值则检查是否匹配计算结果,未赋值则尝试使用正确数字后递归,失败则回溯。

当前编译错误

• Couldn't match type ‘s’
                     with ‘primitive-0.7.3.0:Control.Monad.Primitive.PrimState m0’
      Expected: MVector
                  (primitive-0.7.3.0:Control.Monad.Primitive.PrimState (ST s)) Int
        Actual: MVector
                  (primitive-0.7.3.0:Control.Monad.Primitive.PrimState m0) Int
      ‘s’ is a rigid type variable bound by
        the type signature for:
          canSolve :: forall s. Int -> Int -> Int -> M s Bool
        at src/Alphametics.hs:31:1-41

内容的提问来源于stack exchange,提问作者Abhijit Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:50:36