gpt4 book ai didi

haskell - 在 Haskell 中使用 foldr 实现尾部

转载 作者:行者123 更新时间:2023-12-04 18:07:23 25 4
gpt4 key购买 nike

所以今天早些时候我问了 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) [[]] ?

  • 如果您在一段时间后再次陷入困境(或已经想到了这些),请发表评论,我会再给您一点建议。

    关于haskell - 在 Haskell 中使用 foldr 实现尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129119/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com