r_green
Цитата:
А как отделить те функции, которые следует рассматривать как модели математических операций от тех, которые надо рассматривать именно как функции, специфические для данной среды программирования?
Например, ранее обсуждавшиеся операции Equal и SameQ. Как минимум первая из них - явно ассоциируется с математической операцией равенства. Однако это "равенство" на деле игнорирует последние 7 цифр битового представления числа! Так можно ли утверждать, что функция Equal является моделью математической операции равенства?!
Хорошо, что в справке к Equal это хотя бы упомянуто. А в справках к Greater и Less - даже не упоминается, хотя действут та же "фича"!
Ну и где здесь единая логика?! Как пользователь должен выбирать функции, если их названия лгут, и даже в справке к ним зачастую нельзя найти важнейших их "особенностей", несовместимых с их простым математическим предназначением?
Добавлено:
Откровенно говоря, я вообще не понимаю, с какого черта разработчики решили отбрасывать последние 7 цифр битового представления числа. Почему не 8? Почему не 2? Даже эта, полудокументированная особенность, "подвешивает" пользователя. Хотя я и видел в документации это замечание раньше, я пропускал его "мимо ушей" из-за очевидной абсурдности и полной неочевидности мотивации такого поведения примитивнейших и фундаментальнейших (казалось бы!) функций.
Предположим, я захотел написать функцию, которая будет сравнивать все цифры битового представления числа. Оказывается, эта элементарнейшая задача в Mathematica требует привлечения таких сложных функций, как RealDigits или SetPrecision. И только путем проб и ошибок можно обнаружить, что реализовать полноценную операцию равенства, по-видимому, можно с помощью функций Min и Max, которые по счастливой случайности не отбрасывают последние 7 цифр двоичного представления числа (что в справке не отражено). Однако по самой очевидной логике эти функции должны быть сложнее, чем операция Equal, а последняя - фундаментальнее, чем предыдущие! На деле же для реализации примитивнейшей функции проверки равенства двух чисел своими силами (удивительно, но среди встроенных функций ее нет!) надо прибегать к более сложным функциям! Где здесь логика?!
Цитата:
Всё, что я предложил - это рассматривать Times[] как модель математической операции умножения. Вряд ли это можно назвать отступлением от общей логики математического пакета вообще, а не только Mathematica...
А как отделить те функции, которые следует рассматривать как модели математических операций от тех, которые надо рассматривать именно как функции, специфические для данной среды программирования?
Например, ранее обсуждавшиеся операции Equal и SameQ. Как минимум первая из них - явно ассоциируется с математической операцией равенства. Однако это "равенство" на деле игнорирует последние 7 цифр битового представления числа! Так можно ли утверждать, что функция Equal является моделью математической операции равенства?!
Хорошо, что в справке к Equal это хотя бы упомянуто. А в справках к Greater и Less - даже не упоминается, хотя действут та же "фича"!
Ну и где здесь единая логика?! Как пользователь должен выбирать функции, если их названия лгут, и даже в справке к ним зачастую нельзя найти важнейших их "особенностей", несовместимых с их простым математическим предназначением?
Добавлено:
Откровенно говоря, я вообще не понимаю, с какого черта разработчики решили отбрасывать последние 7 цифр битового представления числа. Почему не 8? Почему не 2? Даже эта, полудокументированная особенность, "подвешивает" пользователя. Хотя я и видел в документации это замечание раньше, я пропускал его "мимо ушей" из-за очевидной абсурдности и полной неочевидности мотивации такого поведения примитивнейших и фундаментальнейших (казалось бы!) функций.
Предположим, я захотел написать функцию, которая будет сравнивать все цифры битового представления числа. Оказывается, эта элементарнейшая задача в Mathematica требует привлечения таких сложных функций, как RealDigits или SetPrecision. И только путем проб и ошибок можно обнаружить, что реализовать полноценную операцию равенства, по-видимому, можно с помощью функций Min и Max, которые по счастливой случайности не отбрасывают последние 7 цифр двоичного представления числа (что в справке не отражено). Однако по самой очевидной логике эти функции должны быть сложнее, чем операция Equal, а последняя - фундаментальнее, чем предыдущие! На деле же для реализации примитивнейшей функции проверки равенства двух чисел своими силами (удивительно, но среди встроенных функций ее нет!) надо прибегать к более сложным функциям! Где здесь логика?!