因此,今天早些时候,我询问了implementing inits via foldr。我现在对尾部也有类似的问题。
首先,我有一个解决方案。但是,这不是我需要的解决方案,而是我应有的解决方案。或类似的东西:

代码:

tails :: [a] -> [[a]]
tails = foldr ( \ x y ->  reverse([] : reverse(map (x:) y) )) [[]]

这提供了正确的结果,但是不符合我们教授为我们设置的模式。该模式如下所示:
tails :: [a] -> [[a]]
tails = foldr ( \ x y -> undefined : undefined ) undefined

因此,很明显,我的功能需要调整,但是由于我总是退回到我的解决方案中,所以我不去理会它。

关于如何更好地解决此问题的任何提示?

提前致谢。

解决了:
tails :: [a] -> [[a]]
tails = foldr ( \ x y -> (x : (head y)) : y) [[]]

最佳答案

一些提示:

  • 您知道tails [] == [[]],因此您的初始值必须为[[]],因此您将拥有
    tails = foldr (\x y -> undefined : undefined) [[]]
  • length (tails xs !! n) > length (tails xs !! (n+1))或用简单的英语:在列表中,每条尾部的长度会变短。
  • 您如何看待foldr (\x (y:ys) -> undefined : undefined) [[]]

  • 如果过一会儿又被卡住(或已经考虑过这些问题),请发表评论,我会再给您一个提示。

    10-06 10:32