我参加了Haskell课程,这是我的任务之一。关于如何开始解决这个问题,我完全不知道。如果有人指出我正确的方向,我会很感激。我有"使用Haskell的功能编程简介"由Bird和Wadler撰写。 感谢。
答案 0 :(得分:1)
确切的答案取决于scanr
的定义方式。当然,如果scanr
的定义与您的等式完全一致,则目标变得微不足道; - )
作为一般性建议,我将从eta扩展问题开始。也就是说,我们通过建立
来证明目标scanr f a l = (map (foldr f a) . tails) l
适用于所有f,a,l
。然后我会尝试在列表参数l
上进行归纳(即,在其长度上)。
案例为零:如果l
为[]
,则等式成立,因为......
案例缺点:假设等式适用于l
。那么等式必须等于x:l
,因为......
在这里,等式推理应该足够了:通过扩展scanr
,map
,foldr
,tails
的(递归)定义,你应该能够得出结论。