Kev*_*vin 1 recursion haskell loops
我正在尝试使用元组的第二个数字创建一个新列表,如果第一个数字在第一个列表中,这里是一个示例 helplist [0,2] [(0,"a"),(3,"x"),(5,"y"),(1,"b"),(2,"c")] = ["a","c"]
我尝试了很多组合,但是没有成功,这是我的代码:
helplist :: [Int] -> [(Int,Char)] -> [Char]
helplist (x:xs) ((i,g):gs) | (x == i) = g : helplist xs gs
helplist _ _ = []
Run Code Online (Sandbox Code Playgroud)
在Java中,我做了2次for循环,但是在haskell中,我只知道递归。
Haskell已经具有在关联列表中查找单个值的功能:
lookup :: Eq a => a -> [(a, b)] -> Maybe b
Run Code Online (Sandbox Code Playgroud)
您需要做的就是在键上映射(适当地应用于列表)。
> helpList keys table = map (\x -> lookup x table) keys
> helpList [0,2] [(0,"a"),(3,"x"),(5,"y"),(1,"b"),(2,"c")]
[Just "a",Just "c"]
Run Code Online (Sandbox Code Playgroud)
好吧,差不多。这会给您返回Maybe String值列表。如果确定每次查找都会成功(或者根本不在乎失败的查找),则可以使用catMaybesfrom函数Data.Maybe删除Nothing响应并从其Just包装中提取实际值。
> import Data.Maybe
> helpList keys table = catMaybes $ map (\x -> lookup x table) keys
> helpList [0,2] [(0,"a"),(3,"x"),(5,"y"),(1,"b"),(2,"c")]
["a","c"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |