gpt4 book ai didi

haskell - 测试列表是否已排序

转载 作者:行者123 更新时间:2023-12-03 22:58:24 28 4
gpt4 key购买 nike

在haskell中找到最少的列表真的很容易:
foldl1 (min) [9,5,7,3,7,4,6,10]给我 3 . ;)

我换了 min<=测试列表是否已排序:
foldl1 (<=) [9,5,7,3,7,4,6,10]
我收到此错误消息:

No instance for (Num Bool) arising from the literal `9'
Possible fix: add an instance declaration for (Num Bool)
In the expression: 9
In the second argument of `foldl1', namely `[9, 5, 7, 3, ....]'
In the expression: foldl1 (<=) [9, 5, 7, 3, ....]

有没有办法解决这个错误?

最佳答案

是的。从我们的基本案例开始

isSorted [] = True -- An empty list is sorted

现在对于非空的情况
isSorted (x:xs) = fst $ foldl' step (True, x) xs
where step (b, x) y = (b && (x <= y), y)

本质上,我们在元组的第一个参数中跟踪排序状态,在第二个参数中跟踪前一个元素,然后我们在每一步更新排序状态和值。

虽然这不是懒惰并且不适用于无限列表,而是尝试
 import Control.Applicative

allSorted :: Ord a => [a] -> Bool
allSorted = all (uncurry (<=)) . (zip <$> id <*> tail)
allSorted = all (uncurry (<=)) . (zip <*> tail)
allSorted = and . (zipWith (<=) <*> tail)

关于haskell - 测试列表是否已排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com