Почему этот кортеж имеет 2 элемента?
пусть р = пусть х = 1 в х + 1, пусть у = 2 в у + 1, 4
поскольку comma ,
имеют самый низкий приоритет, я бы изображение p
имеет 3
элементы: (2, 3, 4)
,
Но по факту, p
имеет только 2
элементы: (2, (3, 4))
Зачем?
Почему последний ,
принадлежит let y
выражение, но не за его пределами?
2 ответа
Я бы ожидал let...in...
иметь следующий синтаксис
пусть привязка = выражение в выражении
и блок идет как можно дальше вправо.
В вашем примере парсер OCaml ожидает
let y = 2 in y + 1, 4
быть выражением и разбирает его как (3, 4)
успешно.
Эквивалент вашего примера с явными скобками
let p = (let x = 1 in x + 1, (let y = 2 in y + 1, 4))
Если вы хотите вернуть окончательный результат (2, 3, 4)
, вы должны поставить скобку, чтобы остановить let...in...
блок в соответствующем месте:
let p = let x = 1 in x + 1, (let y = 2 in y + 1), 4
Попробуйте написать в несколько строк с отступом, чтобы показать связь:
let p =
let x = 1 in x + 1,
let y = 2 in y + 1, 4
Таким образом, вы можете видеть, как одно "принадлежит" другому.
(2, (3,4)) это именно то, что я ожидал.