Haskell如何仅用Prelude实现按给定字典的反向翻译查找功能
Haskell翻译函数实现思路
核心逻辑拆解
你的需求本质是把现有「目标词→同义词列表」的字典结构,转换成「同义词→目标词」的查询映射,再按输入单词查映射取值即可,全程只用Prelude内置函数就能实现,不需要额外导入包。
分步实现方案
- 第一步:反转字典结构
用concatMap遍历原字典的每条记录,把每个同义词和对应的目标词绑定成键值对,拼接成新的映射列表:reverseDict :: [(String, [String])] -> [(String, String)] reverseDict = concatMap \(target, synonyms) -> map (\syn -> (syn, target)) synonyms - 第二步:实现查询逻辑
用Prelude内置的lookup函数在反转后的映射里查询输入单词,匹配到就返回对应目标词,没匹配到可以按需求返回原单词或者其他默认值:dictionary = [ ("doubleplusgood",["excellent", "fabulous", "fantastic", "best"]), ] translate :: String -> String translate word = case lookup word (reverseDict dictionary) of Just res -> res Nothing -> word -- 未匹配到的默认处理逻辑,可按需调整
效果验证
按照你给出的示例,调用translate "excellent"会返回"doubleplusgood",完全符合要求。
内容的提问来源于stack exchange,提问作者amonmi
相关产品推荐
相关产品推荐

