Помогите мне понять приоритет лямбда-выражения - PullRequest
1 голос
/ 01 февраля 2011

Глядя на таблицу Operace Precedence , меня смущает, где лямбда-выражения вписываются во все это. При нумерации таблицы от 1 до 25 (с наименьшего до наивысшего приоритета) я вижу два ключевых токена, используемых для составления лямбда-выражений: fun неассоциативен 6, а -> является ассоциативно справа 8. То есть fun ... -> ... , Это может быть моей первой ошибкой в ​​понимании, так как я даже не уверен, играет ли предшествование роль в теле лямбда-выражения (правая часть ->). Я могу думать только о том, что приоритет играет роль во всем выражение, поэтому я перейду к этому. Согласно этой таблице, оператор последовательности, ;, имеет более низкий приоритет, чем 4, чем оператор fun. Который, я полагаю, говорит, что

fun (x:int) -> x + 3 ; 2;;

должно быть эквивалентно

((fun (x:int) -> (x + 3)) ; 2);;

все же это фактически эквивалентно

(fun (x:int) -> (x + 3 ; 2));;

Я ценю любую помощь, разъясняющую мою интерпретацию правил старшинства, данных в таблице, на которую даны ссылки, и фактических правил старшинства для лямбда-выражений! Спасибо!

1 Ответ

4 голосов
/ 01 февраля 2011

MU

(Если вы читаете таблицу приоритетов операторов, вы уже потеряли. Возможно, в таблице есть ошибки, но кого это волнует, не читайте таблицу. И не используйте оператор последовательности (;). И если вы используете оператор последовательности рядом с лямбда-выражением, то поместите лямбда-скобку в круглые скобки. Или просто поместите каждую лямбда-скобку в круглые скобки. Я все время касаюсь кода синтаксического анализатора F #, и я понятия не имею, каков относительный приоритет ; против fun против ->, я даже не знаю, что значит -> иметь приоритет (это , а не оператор в выражениях (только в типах, где это действительно право-ассоциативно) ... Я не могу представить себе удовлетворительного ответа на этот вопрос или какого-либо продолжения. Вы не должны быть заинтересованы в этом, если вы не пишете свой собственный парсер / компилятор для F #. Это не дроиды вы ищете.)

...