我正在尝试检查列表在 Haskell 中是否按升序或降序排序。我现在对 Haskell 的列表理解理解最好。
目前,我已经...
ascending l = [ x > (head(tail l))| x <- l]
和
descending l = [ x < (head (tail l))| x <- l]
但它只是将列表中的每一项与一个值进行比较,并返回 true 和 false 无论它是大于还是小于,这不是我想要的。我希望它能告诉我列表是否真实,无论它是增加还是减少。
最佳答案
列表是否排序是一个 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-我的份额在哪里 m。在评论中说,这确实不是完成这项工作的正确工具,因此您实际上不应该在生产中这样做。
关于sorting - 如何使用列表理解在 Haskell 中检查列表是否已排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69724173/