与 Haskell 中的排序函数有点混淆
A little confusion with the sorted function in Haskell
sorted :: Ord a => [a] -> Bool
sorted xs = and [x <= y | (x,y) <- pairs xs]
任何人都可以向我解释一下这个随机 and
在 =
之后做了什么吗?它在我编译时有效,但对我来说没有逻辑意义。是因为 Haskell 递归工作并且它使用 and
来比较下一项吗?
非常感谢任何见解。
如果某处定义了函数pairs :: [a] -> [(a, a)]
,表达式
[x <= y | (x,y) <- pairs xs]
是一个布尔值列表(即它的类型是[Bool]
)。 and
是一个类型为 [Bool] -> Bool
的函数:它接受一个布尔值列表,如果列表中的所有布尔值都是 True
和 [=17,它会返回 True
=] 否则。
and [x <= y | (x,y) <- pairs xs]
是一个函数应用程序(and
被应用到列表理解创建的值)。
需要注意的一件事是 Haskell 相对而言没有很多特殊关键字。许多操作由函数而不是特殊语法或关键字表示。
and
不是取两个布尔值逻辑与的函数;那是 &&
(类型 Bool -> Bool -> Bool
)。
相反 and
的类型为 [Bool] -> Bool
;它通过 "anding them all".
将任意数量的布尔值压缩为单个值
sorted :: Ord a => [a] -> Bool
sorted xs = and [x <= y | (x,y) <- pairs xs]
任何人都可以向我解释一下这个随机 and
在 =
之后做了什么吗?它在我编译时有效,但对我来说没有逻辑意义。是因为 Haskell 递归工作并且它使用 and
来比较下一项吗?
非常感谢任何见解。
如果某处定义了函数pairs :: [a] -> [(a, a)]
,表达式
[x <= y | (x,y) <- pairs xs]
是一个布尔值列表(即它的类型是[Bool]
)。 and
是一个类型为 [Bool] -> Bool
的函数:它接受一个布尔值列表,如果列表中的所有布尔值都是 True
和 [=17,它会返回 True
=] 否则。
and [x <= y | (x,y) <- pairs xs]
是一个函数应用程序(and
被应用到列表理解创建的值)。
需要注意的一件事是 Haskell 相对而言没有很多特殊关键字。许多操作由函数而不是特殊语法或关键字表示。
and
不是取两个布尔值逻辑与的函数;那是 &&
(类型 Bool -> Bool -> Bool
)。
相反 and
的类型为 [Bool] -> Bool
;它通过 "anding them all".