eye*_*erg 1 recursion haskell functional-programming
sorted :: Ord a => [a] -> Bool
sorted xs = and [x <= y | (x,y) <- pairs xs]
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释这个随机and是怎么=回事?它在我编译它时起作用,但它对我来说没有逻辑意义.是因为Haskell以递归方式工作并且使用它and来比较下一个项目吗?
任何见解都受到高度赞赏.
如果在pairs :: [a] -> [(a, a)]某处定义了函数,则表达式
[x <= y | (x,y) <- pairs xs]
Run Code Online (Sandbox Code Playgroud)
是一个布尔值列表(也就是它的类型[Bool]).and是一个函数,其类型是[Bool] -> Bool:它采用一个布尔列表,True如果列表中的所有布尔值都是True,False则返回.
and [x <= y | (x,y) <- pairs xs]是一个函数应用程序(and正在应用于列表推导创建的值).
有一点需要注意的是,相比之下,Haskell没有很多特殊的关键词.许多操作由函数表示,而不是由特殊语法或关键字表示.