文字列と文字列のリストのリストを取得し、渡された文字列を含むが渡された文字列を含まない各リスト内のすべての要素のリストを返すこの関数があります。
myfilter([["a","b"],["c","d"],["e","a","x"]], "a") -> ["b","e","x"]
fun myfilter(list : string list list, s : string) =
case list of
[] => []
|xs::xs' => case all_except_option(s, xs) of (* helper function that does it for a string and a list of strings *)
NONE => []
|SOME n => if n = xs
then myfilter(xs',s)
else n@myfilter(xs',s)
ご覧のとおり、これは再帰関数であり、末尾再帰関数に変換したいと考えています。末尾再帰の例には精通していますが、上記の関数でそれを行う方法がわかりません