Переопределить неявные идентификаторы в Standard ML - PullRequest
0 голосов
/ 16 декабря 2018

Я хотел бы определить функцию div, но получить исключение вида

Error: expression or pattern ends with infix identifier "div"

Насколько я понимаю, div - это не ключевое слово, а обычная функция.Или я не прав?Если так, то должна быть возможность переопределить эту функцию.Могу ли я удалить идентификаторы из области?Есть ли что-то вроде NoImplicitPrelude в Haskell?

update

Затем возник вопрос: как удалить состояние инфикса?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Нашел решение от другой вопрос

type elem = {tag:string, attrs: (string*string) list}
nonfix div
fun div attrs : elem = {tag = "div", attrs = attrs}
0 голосов
/ 16 декабря 2018

Чтобы использовать инфиксный идентификатор в качестве нефиксированного, необходимо поставить ключевое слово op впереди.Например:

val op + = 0
val op div = op *
fun op + (x, y) = op @ (y, x)
fun op div (x, y) = x * y

Синтаксис fun также позволяет использовать инфиксные операторы для определений, как:

fun x / y = x * y

Fwiw, вы также можете определить свои собственные инфиксные операторы:

infix ++
fun x ++ y = (x + y) - 1

infix times
fun x times y = x * y

Редактировать: Вы также можете удалить инфиксный статус, объявив его nonfix:

nonfix div
fun div x = 1/x
...