问题描述
我只是想创建一个简单的函数,该函数需要一个列表,并确保列表中的数字按升序排列。
`ascending :: Ord t => [t] -> Bool
ascending [] = True
ascending (x:xs) = (tracker xs x)
tracker :: Ord t => [t] -> t -> Bool
tracker [] y = True
tracker (x:xs) y | if y <= x = True
| otherwise = False`
到目前为止,这是我得到的,但是我得到的是“变量不在范围内:升序:: [Integer]-> t ” 由于某种原因,我不知道如何解决此问题
解决方法
您的程序中存在语法错误,if
不可用于保护。因此,您可以使用以下方法修复语法错误:
tracker :: Ord t => [t] -> t -> Bool
tracker [] y = True
tracker (x:xs) y | y <= x = True
| otherwise = False
但是这个tracker
不足以检查 entire 列表是否按升序排列,它只会检查前两个 元素是否按升序排列订购。如果是y <= x
,则应递归列表的其余部分,以检查其是否也按升序排列。例如,您可以这样写:
tracker :: Ord t => [t] -> t -> Bool
tracker [] y = True
tracker (x:xs) y = y <= x && tracker xs x