AMI*_*HAD 2 haskell functional-programming
在Haskell编程语言中,我们如何生成相同元素的无限列表.Haskell中的代码是什么,用户输入生成的那个数字的一些数字和无限列表.我练习但是没有成功.我的逻辑如下:代码:
repeat :: a -> [a]
repeat x = xs where
xs=x*xs
Run Code Online (Sandbox Code Playgroud)
你是相当接近,但在这里,奇怪的是,你写的x*xs,(*)是通常用于操作员乘号,它是一个函数,是一个方法Num类型类.
如果构造列表,则使用列表数据构造函数.两个数据构造函数是[] :: [a](空列表),和(:) :: a -> [a] -> [a].在这里使用(:)运算符是有意义的:我们在前面xs加上x,所以我们可以写:
repeat :: a -> [a]
repeat x = xs
where xs = x : xs
Run Code Online (Sandbox Code Playgroud)
因此,我们在这里为给定的x参数构建一个链接列表,如下所示:
+-------+
| (:) |<-|
+---+---+ |
| o | o | |
+-|-+-|-+ |
v `----'
x
Run Code Online (Sandbox Code Playgroud)
所以尾部指的是"cons"元素.因此,如果执行某些列表处理,则内存使用量可能保持不变(没有垃圾回收),因此Haskell会在同一个 cons对象中循环.