Почему этот кортеж имеет 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)) это именно то, что я ожидал.

Другие вопросы по тегам