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

如何修改Haskell的swapElems函数使其适配所有输入场景

问题分析与修改方案

你的代码在调用swapElems ([],[1,2])时出错,核心原因是模式匹配没有覆盖所有可能的输入情况:

  • 原代码只处理了空输入列表、单元素输入列表、第一个子列表是多元素的输入列表这几种场景,但像([],[1,2])这种包含空列表+多元素列表的双元素输入列表,没有对应的匹配模式,会触发非穷尽模式匹配错误。
  • 另外,原代码的模式设计是针对整个输入列表的结构,而不是逐个处理每个子列表的交换逻辑,导致灵活性不足。

修改后的代码

我们可以拆分逻辑:先写一个处理单个列表前两个元素交换的辅助函数,再用map遍历输入列表的每个子列表,这样能覆盖所有情况:

swapFirstTwo :: [a] -> [a]
swapFirstTwo [] = []                -- 空列表直接返回
swapFirstTwo [x] = [x]              -- 单元素列表直接返回
swapFirstTwo (x:y:xs) = y : x : xs  -- 交换前两个元素

swapElems :: [[a]] -> [[a]]
swapElems = map swapFirstTwo

验证效果

调用swapElems ([],[1,2])会返回([],[2,1]),符合预期;其他测试场景也能正常工作:

  • swapElems [] → []
  • swapElems [[3]] → [[3]]
  • swapElems [[1,2,3], [4], [], [5,6]] → [[2,1,3], [4], [], [6,5]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:01:03