在ocaml中是否可以定义像数组集合函数这样的运算符,可以写成
a.(n)<-v
?
OCaml 手册解释了如何定义 2 参数中缀运算符,但没有解释 3 参数运算符。我想知道是否有一种方法来定义一个函数,有点像
Array.set
方法,可以使用 a.(n)<-v
语法调用。
我想创建一个可以使用以下语法调用的新运算符:
a[b<-c]
我尝试了一些这样的事情:
let ([<-]) a b c = ...
let (#1[#2<-#3]) a b c =...
但是这些都不起作用。
预先感谢您的帮助!
可以定义自定义索引运算符(https://ocaml.org/manual/indexops.html):
let (.?[]) h k = Hashtbl.find_opt h k
let (.![]<-) h k x = Hashtbl.replace h k x
let test =
let h = Hashtbl.create 5 in
h.![1] <- "one";
assert (h.?[1] = Some "one")
但不是通用 mixfix 运算符。
在您的情况下,可能可以将您的运算符分解为两个:
type ('a,'b) s = Subst of 'a * 'b
let (.%[]) a (Subst(a,b)) = ...
let (<--) a b = Subst(a,b)
足以书写
let f a x y= a.%[x <-- y]