リストのサフィックスを返す必要があり、解決できないようです。
リストを指定[1,2,3]
すると、関数は を返す必要があり[[3],[2,3],[1,2,3]]
ます。folderr と補助関数を使用して解決することになっています。
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
の関数を使用できると思います。そうでなければ、そのような関数の実装は簡単なはずです。
これはどう:
[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]
ハスケルは次のようになります。
suffixes = reverse . foldr f [] where
f y [] = [[y]]
f y (yss@(ys:_)) = (y:ys) : yss
私はSMLを知りませんが、解決策は似ているはずです