在Haskell中生成无限的相同元素列表

时间:2018-04-22 19:12:26

标签: haskell functional-programming

在Haskell编程语言中,我们如何生成相同元素的无限列表.Haskell中的代码是什么,用户输入生成的那个数字的一​​些数字和无限列表。我练习但是没有成功。我的逻辑如下: 代码:

repeat :: a -> [a]
repeat x = xs where 
          xs=x*xs

1 个答案:

答案 0 :(得分:8)

你非常接近,但这里奇怪的是你写x*xs(*)是一个通常用于乘以数字的运算符,它是一个函数这是Num类型类的方法。

如果您构建列表,则使用列表数据构造函数。两个数据构造函数是[] :: [a](空列表)和(:) :: a -> [a] -> [a]。在这里使用(:)运算符是有意义的:我们将xs添加到x,因此我们可以写:

repeat :: a -> [a]
repeat x = xs
    where xs = x : xs

这里我们构造了一个给定的x参数,一个看起来像的链表:

+-------+
|  (:)  |<-|
+---+---+  |
| o | o |  |
+-|-+-|-+  |
  v   `----'
  x

所以尾部指自己的“cons”元素。因此,如果执行某些列表处理,则内存使用量可能保持不变(没有垃圾回收),因此Haskell会在相同的 cons对象中循环。< / p>