Воистину поразительный результат!!! - страница 8

 

Я уже как-то отвечал по этому вопросу. Примерно так: "да, так получилось, что приоритет операций в MQL4 отличается от приоритета операций, принятого в си. По историческим причинам. Перешло из MQL II. Но так как это заметили не сразу и уже написано очень много программ, мы не будем изменять приоритет операций, потому что такое изменение повлечёт неожиданное изменение в работе некоторого числа программ"

В MQL5 приоритеты операций точно соответствуют приоритетам, принятым в языке C++

 
stringo >>:


В MQL5 приоритеты операций точно соответствуют приоритетам, принятым в языке C++

Спасибо. Думаю вопрос исчерпан. Ждем пятерку.

 
TheXpert писал(а) >>

Из симметричности операций. А симметричность операций напрямую следует из выделенных формул.

У одной из симметричных операций не может быть приоритета над другой.

Андрей, я не спорю, что операции симметричны. Но каким образом из их симметричности вытекает равенство приоритетов? Я ж тебе уже привел выражение, результат которого не определен. В зависимости от того, как мы раскроем скобки, он меняется.

Что такое приоритет? Это способ интерпретации неопределенного выражения a or b and c, т.е. инструкция о том, какую его часть следует вычислять в нем первой. Этот способ фактически задает относительный приоритет операций конъюнкции и дизъюнкции. В языке Си, если нет дополнительной информации, неявные скобки, определяющие порядок вычислений, нужно поставить вот так: a or (b and c), а в MQL4 - (a or b) and c. Результаты будут разными.

Подозреваю, что, в отличие от арифметики с обычными операциями сложения и умножения, в чистой булевой алгебре однозначной интерпретации приведенного выражения просто нет - а значит, и нет приоритета операций по умолчанию. Приоритет появляется только в языках программирования. Но я могу быть и неправ.

P.S. Ну вот, ты уже сам себе ответил.

 
Mathemat >>:

Подозреваю, что, в отличие от арифметики с обычными операциями сложения и умножения, в чистой булевой алгебре однозначной интерпретации приведенного выражения просто нет - а значит и нет приоритета операций по умолчанию. Приоритет появляется только в языках программирования. Но я могу быть и неправ.

Я это и хотел сказать. Поэтому имхо, в языке можно указывать любой порядок, и это ни в коем разе не будет ошибкой. Проблема только в общепринятости решения.

 
Mathemat >>:
....

Приоритет появляется только в языках программирования. Но я могу быть и неправ.

Не только, в большинстве учебниках по алгебре логики тоже приоритет определен, т.е логическое умножение имеет больший приоритет, чем логическое сложение, это точно сам преподавал, он интенсивно эксплуатируется когда выводится КНФ (ДНФ) без таблицы истинности, аналитически

 
stringo писал(а) >>

Я уже как-то отвечал по этому вопросу. Примерно так: "да, так получилось, что приоритет операций в MQL4 отличается от приоритета операций, принятого в си. По историческим причинам. Перешло из MQL II. Но так как это заметили не сразу и уже написано очень много программ, мы не будем изменять приоритет операций, потому что такое изменение повлечёт неожиданное изменение в работе некоторого числа программ"

В MQL5 приоритеты операций точно соответствуют приоритетам, принятым в языке C++

Круто. Скажите плиз, а как в 5-ке с поддержкой других языков? Полноценной, а не через DLL.

 
Я готов согласиться, Galaxy, что умножение в учебниках неявно (по умолчанию) имеет высший приоритет по отношению к сложению. Но никакого отражения в синтаксисе для такого факта нет. Это просто соглашение, принятое для интерпретации сокращенных выражений, в которых нет скобок.
 
stringo писал(а) >>

Я уже как-то отвечал по этому вопросу. Примерно так: "да, так получилось, что приоритет операций в MQL4 отличается от приоритета операций, принятого в си. По историческим причинам. Перешло из MQL II. Но так как это заметили не сразу и уже написано очень много программ, мы не будем изменять приоритет операций, потому что такое изменение повлечёт неожиданное изменение в работе некоторого числа программ"

В MQL5 приоритеты операций точно соответствуют приоритетам, принятым в языке C++

Хороший ответ. С такой постановкой вопроса полностью согласен. Это ответственное решение.

 
Galaxy >>:

Не только, в большинстве учебниках по алгебре логики тоже приоритет определен, т.е логическое умножение имеет больший приоритет, чем логическое сложение, это точно сам преподавал, он интенсивно эксплуатируется когда выводится КНФ (ДНФ) без таблицы истинности, аналитически

Мда, действительно. Приношу свои извинения. Но это неправильно

 
Mathemat >>:
Я готов согласиться, Galaxy, что умножение в учебниках неявно (по умолчанию) имеет высший приоритет по отношению к сложению. Но никакого отражения в синтаксисе для такого факта нет. Это просто соглашение, принятое для интерпретации сокращенных выражений, в которых нет скобок.

В памяти стали всплывать булевые решетки, фильтры, идеалы, кольца ... Всетаки назвали коньюнкцию логическим умножением не от фонаря: есть несколько прямых интерпретаций

1. Если возьмем кольцо вычетов по модулю два т.е. (0,1 +,*), тогда таблица умножения будет в точности соответствовать таблице истинности для коньюнкции и, соответсвено, таблица сложения этого кольца - таблице булевой симметрической разности или исклющее "или" (Затупил и исправил), т.е. имеем бинарную арифметику, частный случай обычной арифметики, где умножение главнее сложения, т.е. коньюнкция главнее симметрической разности, а значит, очевидно, и дизьюнкции .

2. в булевой алгебре 1 является нейтральным элементом для коньюнкции, a 0 для дизьюнкции : 1 && a = a, 0 && a = 0 ; 1 || a = 1, 0 || a = a ;

3. Фильтры (строятся пересечением) всегда содержат 1, идеалы ( строятся об'единением) содержат 0, хотя фильтр и идеал понятия двойственые.