我有一个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
成一个功能,并添加这一切设定的?这里的主要问题是我需要从用户执行上的用户定义的输入的变化,那么这个变化增加了一组,如果没有变化,则返回一个空集,但与方式及其现在正在做,如果有没有改变我仍然添加到集合,因为我做了函数调用来分别添加到集合,但是我可以将所有这些集中到一个函数中吗?