如何在OCaml中定义一个中缀(非符号,即非运算符)函数?

16

OCaml支持在纯文本中定义的中缀函数吗?

arg1 `plus` arg2 = arg1 + arg2 

谢谢

2个回答

14

不行。如OCaml手册所解释的那样,中缀运算符只能包含特殊字符,分别为!$%&*+-./:<=>?@^|~(或者只有在第一位时才可以是#),并且不能以!?~开头。

如果要定义中缀操作,则必须将符号放入括号中:

# let (+++) x y = x + 2 * y;;
...
# 3 +++ 4;;

- : int = 11

1
基础语言不支持将中缀运算符作为标识符使用。
您可以使用ppx对OCaml的语法进行更多或更少任意的扩展,但这并不是轻易可行的(依我之见)。
这里有一个页面,其中包含指向ppx信息的链接:https://ocaml.io/w/PPX

8
它确实具有标识符“land”、“lor”、“lxor”、“lnot”、“lsl”、“lsr”、“asr”、“mod”和“or”作为中缀运算符,但您无法定义自己的中缀运算符。 - newacct

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接