Почему в CShell операторы ассоциативны справа, а в C — слева?

В ответ на мой предыдущий вопрос, почему CShell так отличается из С?

  • 4 - 3 + 1 = 2 in C.
  • 4 - 3 + 1 = 0 в CShell.

Любые идеи?


person Community    schedule 18.06.2009    source источник
comment
Судя по всему, csh также требует наличия пробелов между арифметическими операторами, согласно Csh-программированию, считающемуся вредным (faqs.org/faqs/unix-faq/shell/csh-whynot)   -  person bk1e    schedule 20.06.2009
comment
Просто чтобы добавить легкомыслия, в tcsh (к которому /bin/csh часто является символической ссылкой), 4 - 3 + 1 оценивается как 2.   -  person Keith Thompson    schedule 21.03.2013


Ответы (2)


Как правило, в человеческих документах традиционная запись слева направо (левая ассоциативная). Итак, для людей (которые использовали эту нотацию задолго до c, csh или даже любого понятия компьютеров):

4 - 3 + 1 = (4 - 3) + 1 = 1 + 1 = 2

Почему? Думаю, лучший ответ — потому что. Это то же самое, что и при движении по левой или правой стороне дороги. На самом деле не имеет значения, с какой стороны, пока все используют одно и то же.

ИМХО, csh неверен, поскольку он нелогичен. Возможно, это была ошибка (они хотели оставить ассоциативность, но неправильно закодировали) и стала устаревшей, поскольку от этого уже зависели другие вещи.

person Community    schedule 19.06.2009

Продукты писали разные люди, и у них были разные взгляды на то, как обрабатывать вычисления. А поскольку C Shell был написан вторым, я думаю, что они виноваты в том, что не последовали примеру номинального родительского языка.

person Community    schedule 18.06.2009