带有 3 个参数的中缀运算符 ocaml

问题描述 投票:0回答:1

在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 =...

但是这些都不起作用。

预先感谢您的帮助!

syntax ocaml infix-notation infix-operator
1个回答
0
投票

可以定义自定义索引运算符(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]
© www.soinside.com 2019 - 2024. All rights reserved.