如何导出扫描仪f a = map(foldr f a)。哈斯克尔的尾巴?

时间:2014-05-20 14:52:38

标签: haskell

我参加了Haskell课程,这是我的任务之一。关于如何开始解决这个问题,我完全不知道。如果有人指出我正确的方向,我会很感激。我有"使用Haskell的功能编程简介"由Bird和Wadler撰写。 感谢。

1 个答案:

答案 0 :(得分:1)

确切的答案取决于scanr的定义方式。当然,如果scanr的定义与您的等式完全一致,则目标变得微不足道; - )

作为一般性建议,我将从eta扩展问题开始。也就是说,我们通过建立

来证明目标
scanr f a l = (map (foldr f a) . tails) l

适用于所有f,a,l。然后我会尝试在列表参数l上进行归纳(即,在其长度上)。

案例为零:如果l[],则等式成立,因为......

案例缺点:假设等式适用于l。那么等式必须等于x:l,因为......

在这里,等式推理应该足够了:通过扩展scanrmapfoldrtails的(递归)定义,你应该能够得出结论。