当前位置: 首页 > 知识库问答 >
问题:

为无限列表定义一个函数Haskell

鲜于致远
2023-03-14

我正在尝试编写更长的函数:[a]-

longer :: [a] -> Int -> Bool
hossz (x:xs) = length (x:xs)
hossz [] = 0
longer [] _ = False
longer (x:xs) y | y<0 = error ("negative parameter")
                    | hossz(x:xs)>y = True
                    | otherwise = False

在我为它提供一个无限的列表之前(更长[1..]例如,10),它将陷入某种无限循环,无法完成运行。所以问题是,有没有一种方法可以定义它,如果它得到一个无限列表,它只会返回True,而不会试图计算整个结果?提前谢谢

共有1个答案

殷轶
2023-03-14

length正在尝试计算列表的长度,对于一个无限长的列表来说,这需要永远的时间。

不过,你根本不需要计算长度。你只需要在尾部递归一个较小的整数。当整数达到0时,列表要么是空的,要么不是;它有多长并不重要。

longer :: [a] -> Int -> Bool
longer _ n | n < 0 = True
longer xs 0 = ...
longer [] n = False  -- n > 0
longer (x:xs) n = longer xs (n - 1)
 类似资料:
  • 问题内容: 我可以在python3.2的全局范围内调用嵌套在另一个函数内的函数吗? 这是从外部func1()调用func2()的一种方法吗? 问题答案: 否,除非您返回该函数: 甚至

  • 我知道对无限列表进行排序是不可能的,但我正试图为n个数的倍数的无限递增列表写一个定义。 我已经有这个功能了 它返回n的无限倍数列表。但现在我想构建一个函数,给定一个返回列表中所有数字的倍数的无限递增列表。所以函数

  • 问题内容: 我正在使用jOOQ和一个临时表: 这使我可以编写简单的查询:DSL.select(TYPE,TOKEN).from(TMP)… 但是,当我尝试针对另一个表进行联接时,由于列名并且不具有表名的限制(即,我需要生成的代码看起来像),这会造成歧义。是否可以通过使Jooq理解temp表具有某些列,或通过使用具有限定名称的a来实现此目的? 当然,对于查询的这些部分,我总是可以使用原始SQL,这是

  • 我正在使用 Scala,并希望构建自己的数据帧函数。例如,我想将一列视为数组,循环访问每个元素并进行计算。 首先,我尝试实现自己的getMax方法。因此列x的值为[3,8,2,5,9],该方法的预期输出为9。 下面是它在Scala中的样子 这是我目前所知道的,并得到这个错误 我不知道如何迭代该列。 } 一旦我能够实现自己的方法,我将创建一个列函数 然后我希望能够在SQL的陈述中使用它 给定输入列[

  • 我有JSON数据表单响应如下所示 包含 编辑:我的项目中的每个响应总是以加密字符串的形式接收,这就是为什么我必须自己映射响应,而不能将响应类型放在方法中。这是我的函数的样子

  • 如果你想定义一个类,你只需要使用class关键字。 class MainActivity{ } 它有一个默认唯一的构造器。我们会在以后的课程中学习在特殊的情况下创建其它额外的构造器,但是请记住大部分情况下你只需要这个默认的构造器。你只需要在类名后面写上它的参数。如果这个类没有任何内容可以省略大括号: class Person(name: String, surname: String) 那么构造函