【问题标题】:Haskell - Create list by adding element from one list only if its equal to element at same index in another listHaskell - 只有当它等于另一个列表中相同索引处的元素时,才通过从一个列表中添加元素来创建列表
【发布时间】:2019-11-22 11:16:18
【问题描述】:

这是我要解决的问题:

两个列表 [1,2,3,4] [2,2,3,4] 将变为 [2,3,4] ,因为索引位置为零的元素不相等。因此,比较元素的索引是否相等。您可以假设等长列表作为输入。

所以我创建了一个用递归解决这个问题的函数:

oneHelper :: (Eq t) => [t] -> [t] -> [t]
oneHelper [] [] = [] 
oneHelper (x:xs) (y:ys) = if x == y then [x] ++ oneHelper xs ys
                          else oneHelper xs ys

然后我尝试用这样的列表理解来解决它:

test a b = [x | x <- a, y <- b, x == y]

这只是给了我[2,2,3,4],上面使用了示例输入。我觉得有一种通过列表理解来解决这个问题的巧妙方法,或者只是比我提出的一般解决方案更简洁的方法,但我正在努力实现该解决方案。有没有人看到比我为这个问题所做的更好的东西?

谢谢

【问题讨论】:

    标签: haskell


    【解决方案1】:

    如果您使用这两个生成器,您将遍历第一个列表 (a) 和第二个列表 (b) 中元素的所有可能组合。

    您可能想在此处使用zip :: [a] -&gt; [b] -&gt; [(a, b)],我们同时遍历两个列表

    test a b = [x | (x, y) &lt;- <b>zip</b> a b, x == y]

    【讨论】:

    • “如果你使用这两个生成器,你将迭代所有可能的组合..”,感谢您的启发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多