【问题标题】:How do I check if a list is sorted in Haskell using list comprehension?如何使用列表理解检查列表是否在 Haskell 中排序?
【发布时间】:2021-12-11 21:21:30
【问题描述】:

我正在尝试检查列表在 Haskell 中是升序还是降序排序。我现在最了解 Haskell 中的列表理解。

目前,我有...

ascending l = [ x > (head(tail l))| x <- l]

descending l = [ x < (head (tail l))| x <- l]

但它只是将它们列表中的每个项目与一个值进行比较,并返回真假,无论它大于还是小于,这不是我想要的。我想让它告诉我一个列表是否是真实的,无论它是增加还是减少。

【问题讨论】:

  • 列表理解不是这项工作的正确工具。
  • 我倾向于同意 n.1.8e9-where's-my-sharem。直接递归比理解更好地解决了这个问题,但实际上它可以通过tails上的列表理解很好地完成。

标签: sorting haskell computer-science


【解决方案1】:

列表是否排序是Bool,并且列表推导总是返回列表,因此在列表推导之外没有任何东西是不可能的,但是您可以使用外部的一个函数来做到这一点,如下所示:

ascending l = and [x <= y | (x, y) <- zip l (tail l)]
descending l = and [x >= y | (x, y) <- zip l (tail l)]

或者像这样:

import Data.List
ascending l = and [x <= y | x:y:_ <- tails l]
descending l = and [x >= y | x:y:_ <- tails l]

但是作为n。 1.8e9-where's-my-share m。在评论中说,这确实不是适合这项工作的工具,因此您实际上不应该在生产中这样做。

【讨论】:

  • 他们似乎想要一个返回 true 的函数,无论列表是升序还是降序。
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2018-01-10
  • 2018-04-25
相关资源
最近更新 更多