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

Haskell实现十五数码谜题递归处理String时类型不匹配错误如何修复

问题修复方案

错误原因

你的编译报错来自puzzle函数的参数传递不符合set的类型约定:
set函数的类型为set :: [[Char]] -> Char -> [[Char]],第一个入参需要是棋盘(Result类型,即[[Char]]),第二个入参是要移动的字符。你原代码中把字符串类型的移动序列(x:xs)作为set的第一个入参传入,类型完全不匹配,因此触发Couldn't match expected type ‘Char’ with actual type ‘[Char]’报错。

修复代码

你需要实现的逻辑是按顺序将每一步移动作用到上一步生成的新棋盘上,属于典型的左折叠场景,有两种实现方式可选:

递归实现

puzzle :: Result -> [Char] -> Result
-- 基准条件:没有待执行的移动,直接返回当前棋盘
puzzle gameboard [] = gameboard
-- 递归逻辑:先执行当前字符的移动,用新棋盘递归处理剩余移动序列
puzzle gameboard (x:xs) = puzzle (set gameboard x) xs

函数式折叠实现(更简洁)

直接用Haskell标准库的foldl实现迭代逻辑,一行即可完成:

puzzle :: Result -> [Char] -> Result
puzzle = foldl set

效果验证

修复后调用pp(puzzle puzzle2 "CB")即可得到你预期的输出:

ABCDE
F HIJ
KGLNO
PQMRS
UVWXT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:03