我需要返回列表的后缀,似乎无法解决它。
给定列表[1,2,3]
,该函数应返回[[3],[2,3],[1,2,3]]
。我们应该使用foldr和辅助函数来解决。
答案 0 :(得分: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 Library中的rev
功能。否则,实现这样的功能应该很容易。
答案 1 :(得分: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]
答案 2 :(得分:0)
Haskell将是:
suffixes = reverse . foldr f [] where
f y [] = [[y]]
f y (yss@(ys:_)) = (y:ys) : yss
我不知道SML,但解决方案应该类似