1

リストのサフィックスを返す必要があり、解決できないようです。

リストを指定[1,2,3]すると、関数は を返す必要があり[[3],[2,3],[1,2,3]]ます。folderr と補助関数を使用して解決することになっています。

4

3 に答える 3

1

SML構文での@Landeiのソリューションは次のとおりです。

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

SMLベーシスライブラリrevの関数を使用できると思います。そうでなければ、そのような関数の実装は簡単なはずです。

于 2012-10-18T09:51:17.420 に答える
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 に答える
0

ハスケルは次のようになります。

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

私はSMLを知りませんが、解決策は似ているはずです

于 2012-10-18T08:47:21.623 に答える