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

Haskell中如何正确使用map实现字符转摩尔斯密码功能

摩尔斯码转换函数编译错误解决

错误原因

  • lookup函数的返回类型是Maybe String,而map要求传入的第二个参数必须是列表类型,二者类型不匹配,因此触发编译报错。
  • fromJust的作用是提取单个Maybe类型中的值,不需要通过map遍历执行,原有写法的逻辑也不符合需求。

修正方案

要求必须使用map函数的前提下,可以将lookup返回的Maybe String包装为单元素列表,再通过map对列表内的唯一元素执行fromJust,最后取出结果即可。
首先需要导入Data.Maybe模块的对应函数,修正后的代码如下:

import Data.Maybe (lookup, fromJust)

morseTab :: [(Char, String)]
morseTab = [('A', ".-"), ('B', "-..."), ('C', "-.-."), ('D', "-.."), ('E', "."), ('F', "..-."), ('G', "--."), ('H', "...."),('I', ".."), ('J', ".---"), ('K', "-.-"), ('L', ".-.."), ('M', "--"), ('N', "-."), ('O', "---"), ('P', ".--."), ('Q', "--.-"), ('R', ".-."), ('S', "..."), ('T', "-"), ('U', "..-"), ('V', "...-"), ('W', ".--"), ('X', "-..-"), ('Y', "-.--"), ('Z', "--..")]

charToCode :: [(Char, String)] -> Char -> String
charToCode f a = head $ map fromJust [lookup a f]

注意事项

如果输入的字符不在传入的映射表中,lookup会返回Nothing,fromJust会直接抛出运行时错误,该行为符合要求使用lookup和fromJust实现功能的设定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:06