Глядя на таблицу 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));;
Я ценю любую помощь, разъясняющую мою интерпретацию правил старшинства, данных в таблице, на которую даны ссылки, и фактических правил старшинства для лямбда-выражений! Спасибо!