根据所有先前的术语计算列表的术语

时间:2015-05-16 19:31:16

标签: haskell recursion functional-programming lazy-evaluation formal-methods

我有以下标识,它定义(隐式)正整数的分区数(即,您可以将整数写为有序正非零整数之和的方式):

一些注意事项:

  1. 这是在Flajolet和Sedjewick的Analytic Combinatorics一书中研究的,公式的图像是从那里开始的,因为stackoverflow不支持LaTeX。

  2. sigma是数字除数的总和

  3. 我想编写一个计算带有P系数的列表的haskell程序。 第i个术语取决于所有先前的术语(是在压缩sigma和之前的Ps时产生的列表的总和)。 这个问题就是如何根据规范“计算”程序的一个很好的例子,比如Gibbons在他的paper中写道。

    问题是:是否存在捕获此类计算的已知递归方案?列表中的每个术语都取决于所有先前术语的计算(并且结果与之前的术语无关,我的意思是,您必须为每个术语进行新的遍历)

1 个答案:

答案 0 :(得分:5)

如何使用自我引用和懒惰?

假设σ的值在无限列表sigma中,然后是

p = [sum (zipWith (*) sigmas (reverse ps)) | ps <- inits p]

会非常巧妙地实现这种递归。

为了简化代码,我忽略了n的因素,也因为我不确定P_0应该是什么。