ネストされたリストを返す関数がSMLにあります。
[["A", "B", "C"], ["A", "B"], ["B", "C"]]]
これらのリストに表示される要素を抽出することは可能ですか?つまり、「B」を出力しますか?
私は効果のために何かを試みましたList.filter (fn y=>(fn x=> x=y)) lst
が、役に立たなかった..何かヒントはありますか?
ネストされたリストを返す関数がSMLにあります。
[["A", "B", "C"], ["A", "B"], ["B", "C"]]]
これらのリストに表示される要素を抽出することは可能ですか?つまり、「B」を出力しますか?
私は効果のために何かを試みましたList.filter (fn y=>(fn x=> x=y)) lst
が、役に立たなかった..何かヒントはありますか?
あなたが与えたネストされたリストの例は代表的なもの、つまり要素が一意で順序付けられていると仮定します。さらに、明示的な型やパラメーター化された比較関数を除外して、関数が文字列ではなく整数で動作するようにします。
まず、問題をリストのペアごとの比較に分解します。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