the*_*ord -2 haskell dummy-variable
下面简单介绍一下字典程序是如何构建的
dictionary = [
("thanks",["danke"]),
("always",["immer"]),
("us", ["uns"])
]
Run Code Online (Sandbox Code Playgroud)
正如你从字典中看到的,字符串成对出现
(string, [string])
Run Code Online (Sandbox Code Playgroud)
\n\n我得到了一本骨架程序形式的字典
\n
不,你已经得到了一本字典
\ndictionary :: [(String, [String])]\ndictionary = [\n ("thanks",["danke"]),\n ("always",["immer"]),\n ("us", ["uns"])\n ]\nRun Code Online (Sandbox Code Playgroud)\n和类型签名
\ntranslate :: String -> String\nRun Code Online (Sandbox Code Playgroud)\n这里实际上没有 \xe2\x80\x9csculpture\xe2\x80\x9d ,但你可以将以下称为骨架translate:
translate (x:xs) = _\nRun Code Online (Sandbox Code Playgroud)\n这样做的目的是,尝试从字典中选择一个合适的元素作为输入的开头。然而,我们已经走错了路,因为输入的开始 x只是第一个字母,而要在字典中匹配,您需要整个单词。
幸运的是,Haskell 附带了一个辅助函数来获取给定字符串中的单词,明智地称为words。因此,将其应用于输入字符串,然后分别翻译每个单词是有意义的:
translate xs = translateWords (words xs)\n\ntranslateWords :: [String] -> String\ntranslateWords = _\nRun Code Online (Sandbox Code Playgroud)\n或者,如果每个单词都应该翻译成另一个单词,
\ntranslate = unwords . map translateWord . words\n\ntranslateWord :: String -> String\ntranslateWord = _\nRun Code Online (Sandbox Code Playgroud)\n在这里,您无需担心进一步解构单词 \xe2\x80\x93,您对各个字母无能为力。相反,只要做到这一点
\ntranslateWord w = _\nRun Code Online (Sandbox Code Playgroud)\nw现在您可以尝试匹配字典中的单词。解释一下你的尝试,
translateWord w\n | w`elem`dictionary = y\n | otherwise = " "\nRun Code Online (Sandbox Code Playgroud)\n但现在是什么情况呢y?并且类型与 : 的使用不匹配,elem这需要dictionary只是单词列表,而不是元组。
因此,您需要的是一个工具,它不仅可以告诉您某个元素是否在列表中,还可以告诉您它是否在列表元素的第一个元组部分中,以及其他元素是否在列表中。该元组的一半是。换句话说,您正在寻找签名的函数
\nsearchMatch :: a -> [(a,b)] -> b\nRun Code Online (Sandbox Code Playgroud)\n嗯,这个问题你可以向胡格尔询问。它在库中提供了一场比赛base:
lookup :: Eq a => a -> [(a, b)] -> Maybe b\nRun Code Online (Sandbox Code Playgroud)\n它Maybe负责告诉您是否找到了匹配项。您可以对其进行模式匹配:
translateWord w = case lookup w dictionary of\n Just wTranslations -> _\n Nothing -> " "\nRun Code Online (Sandbox Code Playgroud)\n现在剩下的_你应该自己尝试填写。
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |