【发布时间】:2014-06-09 21:10:27
【问题描述】:
所以今天早些时候我询问了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) [[]]
【问题讨论】:
-
提示:根据教授的模式,在每一步,
y需要等于tails xs,其中xs是原始列表中x右侧的部分,并且undefined : undefined必须是使用x和y为tails (x:xs)构建正确值的东西。