首页 > 解决方案 > 如何从haskell中的列表中排除特定的元组

问题描述

我对如何在下面的代码中从该列表中过滤掉元素 (1,1) 感到非常困惑。

take 10 [ (i,j) | i <- [1,2], 
                  j <- [1..] ]
yields

[(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(1,10)]

我的想法是使用过滤器之类的东西,但我不太确定在哪里实现它。

我去的是Filter ((i,j) /=0) "the list"

谢谢

标签: listhaskell

解决方案


作为 using 的替代方法filter,您还可以通过添加保护表达式来指定您不希望(1,1)作为列表理解中的元素(i,j) /= (1,1)

take 10 [ (i,j) | i <- [1,2], j <- [1..], (i,j) /= (1,1) ]

这类似于您如何编写集合推导(列表推导模仿):

在此处输入图像描述


这个答案[x | i <- [0..10], let x = i*i, x > 20]给出了一个很好的例子(

  • 发电机,例如。i <- [0..10]提供价值观的来源。
  • 守卫,例如。x > 20是任意谓词 - 对于来自生成器的任何给定值,只有在所有谓词都成立时,该值才会包含在结果中。
  • 本地声明,例如。执行与正常/语句let x = i*i相同的任务。letwhere

取自语法参考expression的不同表达式的名称qual


推荐阅读