gpt4 book ai didi

Haskell 参数 - 比较运算符

转载 作者:行者123 更新时间:2023-12-02 22:11:01 24 4
gpt4 key购买 nike

我想定义一个函数,其参数接受一个列表和一个运算符。这就是我目前拥有的。我正在尝试定义一个可以找到最小值或最大值的高阶函数。

largest :: (a -> a -> Bool) -> a
largest = findType (>)

findType :: (a -> a -> Bool) -> [a] -> a
findType op [] = error "empty list"
findType op [x] = x
findType op (x:xs)
| x op maxTail = x
| otherwise = maxTail
where maxTail = findType op xs

但是,它目前不起作用。

最佳答案

您可以编写接受任何 a -> a -> Bool 函数参数的函数,或者使用可比数据类型实现 Ord 的事实类。

这是一段代码,显示了检查列表是否已排序的两种方法

option1 :: (a->a->Bool) -> [a] -> Bool
option1 op (a:b:ls) = op a b && option1 op (b:ls)
option1 op _ = True

option2 :: (Ord a) => Ordering -> [a] -> Bool
option2 op (a:b:ls) = compare a b == op && option2 op (b:ls)
option2 op _ = True

main = do
let ls = [1, 2, 3]
print $ option1 (<) ls
print $ option2 LT ls

请注意,第二种方法需要使用 Ordering 数据类型,它只有值 LTEQGT(分别表示 <、= 和 >)。您可以通过传递可接受的 Ordering 值列表或其他一些数据结构来使其更灵活,但是,在大多数情况下,第一个选项更合适。

关于Haskell 参数 - 比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307521/

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