Haskell给出“变量不在范围内:[Integer]-> t

问题描述

我只是想创建一个简单的函数,该函数需要一个列表,并确保列表中的数字按升序排列。

`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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...