1

我需要返回一个列表的后缀,似乎无法解决它。

给定一个列表[1,2,3],该函数应该返回[[3],[2,3],[1,2,3]]。我们应该使用 foldr 和一个辅助函数来解决。

4

3 回答 3

1

这个怎么样:

[1,2,3,4] 将返回 [[1,2,3,4],[2,3,4],[3,4],[4]] :

fun myfun1 l = foldr(fn (a,b)=> if a=nil then [] else a::b@myfun1(tl(l)))[] [l]

[1,2,3,4] 将返回 [[4],[3,4],[2,3,4],[1,2,3,4]] :

fun myfun2 l = foldr(fn (a,b)=> if a=nil then [] else myfun2(tl(l))@a::b)[] [l]
于 2015-02-09T19:39:36.147 回答
1

这是@Landei 的 SML 语法解决方案:

fun suffixes xs = 
   let 
      fun f (y, []) = [[y]]
        | f (y, yss as (ys::_)) = (y::ys)::yss
   in
      rev (foldr f [] xs)
   end

我假设您可以使用SML Basis Libraryrev中的函数。否则,实现这样的功能应该很容易。

于 2012-10-18T09:51:17.420 回答
0

哈斯克尔将是:

suffixes = reverse . foldr f [] where
  f y [] = [[y]]
  f y (yss@(ys:_)) = (y:ys) : yss  

我不知道SML,但解决方案应该是类似的

于 2012-10-18T08:47:21.623 回答