Haskell 如何更改(x,y)对之间的泛型关系?

Haskell 如何更改(x,y)对之间的泛型关系?,haskell,Haskell,我是哈斯克尔的新手。我想创建一个通用函数来检查列表中的每两个连续元素是否处于用户作为输入给定的关系中(例如:,=) 该程序可以编译,但当我尝试输入“ordonata[1,2,3,4]) 您可以这样使用您的函数: ordonata[1,2,3,4](尝试ordonata[1,2,3,4](@RobinZigmond更准确地说,当尝试将运算符用作函数时。这可能是传递它,也可能是返回它;或者它可能只是出于某种原因在中缀使用它,例如(除了(或者和(zipWith(uncurry f)list(tail

我是哈斯克尔的新手。我想创建一个通用函数来检查列表中的每两个连续元素是否处于用户作为输入给定的关系中(例如:,=)

该程序可以编译,但当我尝试输入“ordonata[1,2,3,4]<”时,会出现以下错误:


“分析错误(可能是不正确的缩进或不匹配的括号)”

您的实现是正确的

当将诸如
之类的运算符作为函数传递时,Haskell需要在运算符周围加括号:
(>)

您可以这样使用您的函数:


ordonata[1,2,3,4](尝试
ordonata[1,2,3,4](@RobinZigmond更准确地说,当尝试将运算符用作函数时。这可能是传递它,也可能是返回它;或者它可能只是出于某种原因在中缀使用它,例如
(除了
(或者
和(zipWith(uncurry f)list(tail list))
Small fix:
zipWith
不需要无载波函数,所以它只是
和(zipWith f list(tail list))
,或者使用
应用程序的
实例实现函数,
和(zipWith f tail$list)
ordonata :: [a] -> (a -> a -> Bool) -> Bool
ordonata [] f    = True
ordonata list f  = and (map (\(x, y) -> f x y ) (zip list (tail(list))))
ordonata :: (a -> a -> Bool) -> [a] -> Bool
ascending = ordanata (<)
descending = ordanata (>)
allEq = ordanata (==)
ordonata :: [a] -> (a -> a -> Bool) -> Bool
ordonata [] f    = True
ordonata list f  = and (zipWith f list (tail list))