Стандартный ML, идентификатор инфикса, код ошибки - PullRequest
1 голос
/ 12 июня 2011
exception div;  
fun f(x,y) =   
    let  
        val before = 2.0 * x + 3.0 * y  
    in   
        (before + (1.0 / (if x > 0.0001 then x else raise div)) + 2.0 / y) handle div => before / 6.0
    end

Этот код приводит к некоторой ошибке компиляции.

То есть

e.sml: 4.8-4.14 Ошибка: выражение или шаблон начинаются с инфиксного идентификатора "before"
e.sml: 6.8-6.14 Ошибка: выражение или шаблон начинается с идентификатора инфикса "before"
e.sml: 6.57-6.60 Ошибка: выражение или шаблон начинается с идентификатора инфикса "div"
e.sml:6.81-6.84 Ошибка: выражение или шаблон начинаются с идентификатора инфикса "div"
e.sml: 6.88-6.94 Ошибка: выражение или шаблон начинаются с идентификатора инфикса "before"

Почему произошла эта ошибка?Я не использовал инфиксный код, а просто использовал переменную и исключение.

1 Ответ

2 голосов
/ 12 июня 2011

before и div - это инфиксные операторы, определенные в базовой библиотеке SML, поэтому вы не можете использовать их в качестве имен для переменных или исключений, сначала переопределяя их объявление инфикс.

...