Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何创建一个函数来生成一个整数序列的无限列表,该整数序列由两个初始数X_0和X_1递归定义_Haskell_Recursion_Sequence - Fatal编程技术网

Haskell 如何创建一个函数来生成一个整数序列的无限列表,该整数序列由两个初始数X_0和X_1递归定义

Haskell 如何创建一个函数来生成一个整数序列的无限列表,该整数序列由两个初始数X_0和X_1递归定义,haskell,recursion,sequence,Haskell,Recursion,Sequence,假设我有以下整数序列的递归定义:a\u 0=5,a\u n=2a\u 0+3->5,13,29,61125… 我想使用Haskell中的iterate函数来生成这个序列的无限列表。为此,我可以编写以下代码: intSequence::Integer->Integer->[Integer] intSequence a0 m=迭代下一步a0 其中nextNum a=2*a+m ghci>let an=intSequence 5 3 ghci>采取5 a [5,13,29,61,125] 现在让

假设我有以下整数序列的递归定义:
a\u 0=5,a\u n=2a\u 0+3
->
5,13,29,61125…

我想使用Haskell中的
iterate
函数来生成这个序列的无限列表。为此,我可以编写以下代码:

intSequence::Integer->Integer->[Integer]
intSequence a0 m=迭代下一步a0
其中nextNum a=2*a+m
ghci>let an=intSequence 5 3
ghci>采取5 a
[5,13,29,61,125]

现在让我们假设我有以下内容:

X_n=X_n-1*m_1+X_n-2*m_2+a

现在,我想创建一个函数,用以下方式调用:

intSequence x0 x1 m1 m2 a

它返回一个序列的无限列表,该序列遵循上述定义的规则

例如:对于参数
X0=1,X1=2,m1=2,m2=0,a=0
我们得到
Xn=X_n-1*2+X_n-2*0+0=X_n-1*2
,它给出了
[1,2,4,8,16,…]

另一个例子:对于参数
X0=0,X1=1,m1=1,m2=1,a=0
我们得到斐波那契序列
X_n=X_n-1*1+X_n-2*1+0=X_n-1+X_n-2
,它给出了
[0,1,1,2,3,5,8,

如何使用
iterate
实现此
intSequence
函数

我尝试了以下不符合预期的操作:

intSequence::Integer->Integer->Integer->Integer->Integer->Integer->Integer->[Integer]
intSequence x0 x1 m1 m2 a=x0:x1:iterate(nextNum x0)x1
哪里
下一步x0'x1'=x1'*m1+x0'*m2+a
ghci>a=intSequence 0 1 0
ghci>每天10次
[0,1,1,1,1,1,1,1,1,1]

这显然是不正确的,符合逻辑的,所以我从不改变
x0
x1
是什么。我想我需要以某种方式使用递归,但我就是不知道如何使用。我是否应该根本不使用迭代?

使用递归更容易:

——递归的辅助函数
intSequence':(积分a)=>(a,a)->a->a->a->a->[a]
--p2是X_n-2,p1是X_n-1
intSequence'(p2,p1)m1 m2 a=
--使用X_n-1作为新的X_n-2和当前项作为新的X_n-1进行递归
cur:intSequence'(p1,cur)m1 m2 a
--计算序列中的当前项
其中cur=p1*m1+p2*m2+a
--正确设置以前的术语,并将它们预先添加到序列中
intSequence::(积分a)=>a->a->a->a->a->a->[a]
intSequence x0-x1-m1-m2 a=x0:x1:intSequence'(x0,x1)m1-m2 a

啊,当然了,现在我已经看到了,这是如此简单和琐碎。。。非常感谢你!