列表理解,其元素多于数组

时间:2017-03-31 08:06:09

标签: arrays haskell list-comprehension

我正在尝试创建一个包含列表推导的数组:

array = [(x,y)|(x,y,z)<-oldArray, z == 10]

假设oldArray是一个先前制作的具有3个Int值的数组,但我想要制作的新数组只需要前两个,但它们是否被添加取决于第三个的条件

我无法判断这是否正常工作。

2 个答案:

答案 0 :(得分:3)

您编写的示例代码解决了您所描述的问题。 你过滤掉z不是10的元素,然后只取2个元组的第一部分来构建一个新的数组。

答案 1 :(得分:2)

我认为你真正想问的是如何调试haskell程序。对于这种情况,只需启动ghci,并使您的算法有点功能,并使用它。

Prelude> let foo oldArray = [(x,y)|(x,y,z)<-oldArray, z == 10]
Prelude> foo [(1,2,3)]
[]
Prelude> foo [(1,2,10)]
[(1,2)]
Prelude> foo [(1,2,10),(3,4,5),(5,6,10)]
[(1,2),(5,6)]

“正常工作”基本上意味着你真正得到的是你所期望的。我们可以看到,foo工作正常。

或者我们可以在源文件中使用一些print,看看输出是否是预期的。

有关详情,请使用ghci debuggerDebug.Trace

  1. https://hackage.haskell.org/package/base-4.9.1.0/docs/Debug-Trace.html
  2. https://wiki.haskell.org/Debugging
  3. https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#the-ghci-debugger