sorting - 如何使用列表理解在 Haskell 中检查列表是否已排序?

标签 sorting haskell computer-science

我正在尝试检查列表在 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/

相关文章:

swift - 在插入期间有效地对数组项进行排序

haskell - Yampa 中 react (感觉)功能的时差

computer-science - 评估语言 "Turing Completeness"的实用指南是什么?

graph - 使用邻接列表与邻接矩阵的图的大小?

javascript - 如何生成 "composite key"(这又叫什么)?

mysql - MySQL 中的条件排序

c - 在链表上实现归并排序

javascript - 对一串数字进行排序,每个数字中都有一个字母。确保重复项的位置与原始数组中的位置相同

Haskell Prelude.read : no parse String

haskell - 如何从 Haskell 中的文件中读取字节数组?