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
相关产品推荐
相关产品推荐

