在Haskell编程语言中,我们如何生成相同元素的无限列表.Haskell中的代码是什么,用户输入生成的那个数字的一些数字和无限列表。我练习但是没有成功。我的逻辑如下: 代码:
repeat :: a -> [a]
repeat x = xs where
xs=x*xs
答案 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>