1

ネストされたリストを返す関数がSMLにあります。

[["A", "B", "C"], ["A", "B"], ["B", "C"]]]

これらのリストに表示される要素を抽出することは可能ですか?つまり、「B」を出力しますか?

私は効果のために何かを試みましたList.filter (fn y=>(fn x=> x=y)) lstが、役に立たなかった..何かヒントはありますか?

4

1 に答える 1

1

あなたが与えたネストされたリストの例は代表的なもの、つまり要素が一意で順序付けられていると仮定します。さらに、明示的な型やパラメーター化された比較関数を除外して、関数が文字列ではなく整数で動作するようにします。

まず、問題をリストのペアごとの比較に分解します。common順序付きリストのペアの共通要素を見つけるヘルパー関数を定義します。次のようになります。

fun common(xs, []) = []
  | common([], ys) = []
  | common(x::xs, y::ys) = if x=y then x::common(xs, ys) 
                           else if x < y then common(xs, y::ys) 
                           else common(x::xs, ys)

タイプがありint list * int list -> int listます。

commonネストされたリストでこれを機能させるには、次の行に沿って、に基づいてソリューションを作成できます。

fun nested_common([]) = []
  | nested_common(x::[]) = x
  | nested_common(x::y::rest) = nested_common(common(x,y)::rest)

これには型がありint list list -> int listます。

使用する(Moscow MLで):

- nested_common [[1,2,3], [1,2], [2,3]];
> val it = [2] : int list
于 2013-02-11T12:34:39.680 に答える