如何导出扫描f a=映射(foldr f a)。Haskell的尾巴?

如何导出扫描f a=映射(foldr f a)。Haskell的尾巴?,haskell,Haskell,我在上哈斯克尔的课程,这是我的一项作业。我完全不知道如何开始解决这个问题。如果有人给我指出正确的方向,我将不胜感激。我有Bird和Wadler的“使用Haskell的函数编程入门”。 谢谢。确切答案取决于scanr的定义。当然,如果scanr的定义与您的等式状态完全一致,那么目标就变得微不足道;-) 作为一般性的建议,我首先要扩展这个问题。也就是说,我们通过建立 scanr f a l = (map (foldr f a) . tails) l 对于所有f、a、l。然后,我将尝试对列表参数l(

我在上哈斯克尔的课程,这是我的一项作业。我完全不知道如何开始解决这个问题。如果有人给我指出正确的方向,我将不胜感激。我有Bird和Wadler的“使用Haskell的函数编程入门”。
谢谢。

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

作为一般性的建议,我首先要扩展这个问题。也就是说,我们通过建立

scanr f a l = (map (foldr f a) . tails) l
对于所有
f、a、l
。然后,我将尝试对列表参数
l
(即,其长度)进行归纳

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

案例缺点:假设方程式适用于
l
。那么这个方程必须适用于
x:l
,因为


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

这个问题应该是愚蠢的。当我发布haskell时,我对它很陌生,实际上我误解了对我的要求。。。你的答案是正确的,推导这种关系所需要的只是一个简单的归纳推理(我们甚至得到了一个类似的归纳证明——用foldl而不是foldr)。遗憾的是,我关于stackoverflow的第一个问题如此愚蠢;)