我有一個ocaml的問題早解決,但我不知道是否有優化我的解決方案最好的辦法,因爲我已經嘗試了所有的渠道,因爲我很新的ocaml的我真的不能看着辦吧出。我有一個模式功能,可以很好地打印,然後再添加一組功能。漂亮的打印功能如下:多操作ocaml的
let rec processoperatorchange fmt = function
| Zero -> Format.fprintf fmt "0"
| Pproc x -> Format.fprintf fmt "%s" x
| Procdef (p1, x) -> Format.fprintf fmt "%s(%s)" p1 x
| Par (p1, p2) -> Format.fprintf fmt "(%a + %a)" processoperatorchange p1 processoperatorchange p2
| Concur(p1, p2) -> Format.fprintf fmt "(%a | %a)" processoperatorchange p1 processoperatorchange p2
| Rep(p) -> Format.fprintf fmt "!(%a)" processoperatorchange p
,我有另一種功能,做同樣的事情,但隨後改變了印刷的格式(這似乎效率不高,但我不能找出最佳辦法,使更好)
let rec processoperatorchange2 fmt = function
| Zero -> Format.fprintf fmt "0"
| Pproc x -> Format.fprintf fmt "%s" x
| Procdef (p1, x) -> Format.fprintf fmt "%s(%s)" p1 x
| Par (p1, p2) -> Format.fprintf fmt "(%a | %a)" processoperatorchange2 p1 processoperatorchange2 p2
| Concur(p1, p2) -> Format.fprintf fmt "(%a + %a)" processoperatorchange2 p1 processoperatorchange2 p2
| Rep(p) -> Format.fprintf fmt "!(%a)" processoperatorchange2 p
基於這些功能,我有一個調用添加到一個集中的另一個功能:
let op_change p set = concattoset (Format.asprintf "%a" processoperatorchange p) set |>
concattoset (Format.asprintf "%a" processoperatorchange2 p)
爲concattoset
的代碼是:
let concattoset s set = SS.add s set
然而,有沒有一種方法,我可以優化這段代碼,這樣我可以凝聚兩種功能processoperatorchange
和processoperatorchange2
成一個功能,並添加這一切設定的?這裏的主要問題是我需要從用戶執行上的用戶定義的輸入的變化,那麼這個變化增加了一組,如果沒有變化,則返回一個空集,但與方式及其現在正在做,如果有沒有改變我仍然添加到集合,因爲我做了函數調用來分別添加到集合,但是我可以將所有這些集中到一個函數中嗎?