私はこの質問ではっきりと質問をします。条件で印刷
let defined = ["a"; "b"; "e"; "g"; "h"; "u"]
let undefined = ["f"; "k"]
:
a <-> b -> e -> f
| |
v v
h <------- g
| |
v v
u k
は関係が異なり、私はリストdefined
とundefined
、このような結果を抽出entries
let entries = [
("a", ["b"; "h"]);
("b", ["a"; "e"]);
("e", ["f"; "g"]);
("g", ["h"; "k"]);
("h", ["u"]);
]
リストで説明します 私はこのようなグラフが持っています計算した後、注文した新しいリストを受け取った:
let ordered = [["u"];["h"]; ["k"]; ["g"]; ["f"]; ["e"]; ["b"; "a"]]
私はこのような条件でordered
の出力を印刷機能を書きたい:私はリストordered
で新しいリストを生成する関数を持ちたい
1)であればundefined
の要素それを削除するように見える。私は彼らを印刷したい
newordered = [["u"]; ["h"]; ["g"]; ["e"]; ["b"; "a"]]
2)この条件に依存します:
それだけで一つのタイプが依存する場合、それが印刷されます:
Definition name := type depend.
私はこのような
newordered
が期待してい
はequivalance(< - > B)である場合、それが印刷される。
Inductive name1 := type depend 1
with name2 := type depend 2.
WHは
Inductive name := type depend.
それはundefined
リスト内のタイプが表示されたら、それは種類に依存していないとき、それが印刷されます:それは種類によって異なりのリストがあるエン、それが印刷されます
Definition name := name.
としてのnewordered
リスト
私はこのように期待していた出力順序の順番:
Definition k := k.
Definition f := f.
Definition u := u.
Definition h := u.
Inductive g := h -> k.
Inductive e := f -> g.
Inductive b := a -> e
with a := b -> h.
私は未定義のリスト内のすべての要素を印刷する最初の、これらの関数を記述します。
let print_undfined =
List.iter (fun name -> Printf.printf "\nDefinition %s := %s." name name;
print_string "\n")undefined
私は右の印刷機能を持っている - エントリ一覧の右側:
let defn_of =
List.iter (fun (_, xs) ->
List.iter (fun t -> Printf.printf "%s" t) xs)
を、私は別のものを持っていますundefined
リスト
let rec uniquify = function
| [] -> []
| x::xs -> x :: uniquify (List.filter ((<>) x) xs)
let new_sort = uniquify (undefined @ List.flatten ordered)
でordered
リスト内の重複を除去するが、このリストはstring list
であり、それは追加機能フォントをundefined
に登録してください。最後の機能を印刷すると、undefined
のすべての要素を最初に印刷すると、undefined
が複製されます。私はそれを望んでいません。
そして私は最終的に私が最後に望む出力を私のためにプリントする最後の機能をどのように書くことができるのか分かりません。
ありがとうございます!正直なところ、私は同値クラスであるかどうかを示すために関数に苦労しています。 – Quyen
'newordered'を使ったり、' newordered'を作成するのに苦労していますか? 'newordered'の同じリストの2つのラベルは等価クラスです。 – pad
!上記のnew_sort関数は 'newordered'のために書いたものですが、この新しいリストに未定義リストの型を追加したくありません。私はそれが等価クラスにあるときに呼び出すことを知っていますが、要素が1つのときはどうですか?つまり、要素が1つのときに呼び出すことができるかどうか、等価クラスであるかどうかをチェックするということです。これは私が呼び出す関数です。print = List.iter(fun eqvclass - > print_defined_equivalence eqvclass)new_sort – Quyen