Как определить инфиксную (не символьную, то есть не операторную) функцию в OCaml?


Делает данные, используемые вспомогательные функции инфиксной определенными в текстовом виде ?

arg1 `plus` arg2 = arg1 + arg2 

Спасибо

2 3

2 ответа:

Нет. Как поясняется в руководстве OCaml , операторы инфикса могут содержать только специальные символы, а именно:!, $, %, &, *, +, -, ., /, :, <, =, >, ?, @, ^, |, ~ ( или #, но только в первой позиции) и не должен начинаться с !, ? или ~.

Чтобы определить операцию инфикса, необходимо поместить символ в скобки:

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

- : int = 11

Базовый язык не поддерживает операторы инфикса, являющиеся идентификаторами.

Вы можете использовать ppx для создания более или менее произвольных расширений синтаксиса OCaml, но это не то, что можно сделать легко (IMHO).

Вот страница со ссылками на ppx info: https://ocaml.io/w/PPX