haskell中的Double for循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haskell中的Double for循环相关的知识,希望对你有一定的参考价值。

我正在尝试使用元组的第二个数字创建新列表,如果第一个数字在第一个列表中,则在此示例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 _ _ = []

在Java中,我做了2倍for循环,但在haskell中,我只知道递归。

答案
您可以在此处使用

列表理解:

helplist :: Eq a => [a] -> [(a, b)] -> [b] helplist xs gs = [ g | x <- xs, (i, g) <- gs, x == i ]
或者您可以尝试根据另一个列表的值来过滤列表,例如:

helplist :: (Foldable f, Eq a) => f a -> [(a, b)] -> [b] helplist xs gs = concatMap (x -> map snd (filter ((i, _) -> x == i) gs)) xs

以上是关于haskell中的Double for循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django视图中使用for循环返回每次迭代[关闭]

java中的随机循环怎么做?

在 R 中创建一副牌而不使用 While 和 Double For 循环

高效的 double for 循环,其中第二个循环的范围取决于第一个循环的值

ECMAScript 2015:for 循环中的 const

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围