sorted :: Ord a => [a] -> Bool
sorted xs = and [x <= y | (x,y) <- pairs xs]
任何人都可以向我解释and
之后这个随机=
正在做什么吗?它在我编译它时起作用,但它对我来说没有逻辑意义。是因为Haskell以递归方式工作并使用and
来比较下一个项目吗?
非常感谢任何见解。
答案 0 :(得分:8)
如果在某处定义了函数pairs :: [a] -> [(a, a)]
,则表达式为
[x <= y | (x,y) <- pairs xs]
是布尔值的列表(即,其类型为[Bool]
)。 and
是一个类型为[Bool] -> Bool
的函数:如果列表中的所有布尔值均为True
且{{1},则会收到布尔值列表并返回True
否则。
False
是一个函数应用程序(and [x <= y | (x,y) <- pairs xs]
正在应用于列表推导创建的值。)
有一点需要注意的是,相比之下,Haskell没有很多特殊的关键词。许多操作由函数表示,而不是由特殊语法或关键字表示。
答案 1 :(得分:1)
and
不是取逻辑和两个布尔值的函数;这是&&
(类型为Bool -> Bool -> Bool
)。
而and
的类型为[Bool] -> Bool
;它通过“和它们全部”将任意数量的布尔值压缩为单个布尔值。