在另一个函数中调用多个函数Ocaml
我想知道是否有反正我可以在另一个函数中调用相同的函数,但使用不同的参数。这是我想要调用的函数的代码。在另一个函数中调用多个函数Ocaml
let concattoset s set = SS.add s set
有了这个功能,我有一个调用这个函数,但有可能做这样的事情的另一个功能:
let op_change p set = concattoset (Format.asprintf "%a" processoperatorchange p) set ;concattoset (Format.asprintf "%a" processoperatorchange2 p) set ; concattoset (Format.asprintf "%a" processoperatorchange3 p) set
我知道,每当我这样做,最后的期限,并将在此之前的任何其他术语被忽略。有没有可能为此找出最佳方法,或者如果可能的话,可以采取其他方式来做到这一点?
在匹配模式中的类似情况下,可以使用相同的运算符。因此,举例来说,这是我的匹配功能:
let rec processoperatorchange4 fmt = function
| Zero -> Format.fprintf fmt "0"
| Pproc x -> Format.fprintf fmt "%s" x
| Procdef (p1, x) -> Format.fprintf fmt "%a(%s)" processoperatorchange4 p1 x
**| Par (p1, p2) -> Format.fprintf fmt "(%a | %a)" processoperatorchange4 p1 processoperatorchange4 p2 |> Format.fprintf fmt "(%a + %a)"**
可以使用|>
运营商满足您的需求。上面的代码将如下所示:
let concattoset s set = SS.add s set
let op_change p set =
concattoset (Format.asprintf "%a" processoperatorchange p) set |>
concattoset (Format.asprintf "%a" processoperatorchange2 p) |>
concattoset (Format.asprintf "%a" processoperatorchange3 p)
另请参阅OCaml |> operator。
感谢你的支持。我编辑了我的问题,并跟进了关于使用与模式匹配相似的想法 – user1514567
从您的代码判断,您似乎认为SS.add s set
通过添加元素s
来更改集set
。它不是。相反,它会创建一个具有适当元素的新集合。所以,当你做
SS.add a1 set;
SS.add a2 set;
SS.add a3 set
你创建一组包含a1
除了是什么set
。
然后你丢弃集并创建一套包含a2
除了什么是set
(不包含a1
(除非它是没有从一开始))。
然后你丢弃集以及并创建一套包含a3
除了什么是set
(既不含a1
也不a2
(除非...))。 最后一组是结果。一直以来,set
保持不变。
你应该做的不是放弃中间结果,而是建立在它们之上。像这样:
let set1 = SS.add a1 set in
let set2 = SS.add s2 set1 in
SS.add a3 set2
,或者在一气呵成:
SS.add a3 (SS.add a2 (SS.add a1 set))
通过苏波答案显示了不同的方式来写相同。
'let concattoset s set = SS.add s set1'中的set1是什么? – soupault
这是一个错字,我已经更新了我的问题 – user1514567