我在這個問題上明確提出問題。 我有這樣一個圖:有條件打印
a <-> b -> e -> f
| |
v v
h <------- g
| |
v v
u k
有依賴關係列表中的描述entries
let entries = [
("a", ["b"; "h"]);
("b", ["a"; "e"]);
("e", ["f"; "g"]);
("g", ["h"; "k"]);
("h", ["u"]);
]
我提取的列表defined
和undefined
,結果是這樣的:
let defined = ["a"; "b"; "e"; "g"; "h"; "u"]
let undefined = ["f"; "k"]
經過計算,我得到了一個新的名單與他們的訂購:
let ordered = [["u"];["h"]; ["k"]; ["g"]; ["f"]; ["e"]; ["b"; "a"]]
我想寫打印ordered
輸出在這樣的條件下這樣的功能:
1)我想有就會在列表中ordered
產生一個新的列表功能如果undefined
元素出現它會將其刪除。我期待一個newordered
這樣的:
newordered = [["u"]; ["h"]; ["g"]; ["e"]; ["b"; "a"]]
2)我想打印其取決於這個條件:
當它只是一種依賴,它會打印:
Definition name := type depend.
當它是一個等價性(一個< - > 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)
我有另一個功能刪除在ordered
列表中的重複與undefined
列表
let rec uniquify = function
| [] -> []
| x::xs -> x :: uniquify (List.filter ((<>) x) xs)
let new_sort = uniquify (undefined @ List.flatten ordered)
但這份名單是string list
,並將其添加編輯字體中的undefined
列表。所以如果我打印我的最後一個功能,它將複製undefined
如果我選擇先打印undefined
中的所有元素。我不想那樣。
而我不是我怎麼能寫出最後的功能與打印我輸出我想在最後。
感謝您的幫助!老實說,我正在努力表明它是一個等價類。 – Quyen 2012-01-13 10:00:16
你用'newordered'還是創建'newordered'掙扎?因爲'newordered'中同一列表中的兩個標籤是等價類。 – pad 2012-01-13 10:05:50
都!上面的函數'new_sort'是我爲'newordered'編寫的內容,但我不希望它在這個新列表中添加未定義列表的類型。我只知道它是在等價類中調用的,但是當它有1個元素時怎麼樣?我的意思是當它有1個元素時,檢查它可以調用的條件,以及它是等價類時的條件。這是我調用的函數,讓print = List.iter(fun eqvclass - > print_defined_equivalence eqvclass)new_sort – Quyen 2012-01-13 10:33:34