Форум проекта SMath
»
SMath Studio
»
Предложения
»
Функциональное программирование в Mathcad
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
Здравствуйте! Я недавно наткнулся на программу SMath Studio, которая вполне может заменить Mathcad. Однако, я в ней не нашёл одного интересного и любиого мною функционала --- элементов функционального стиля программирования. Дело в том, что функции в Маткаде можно передавать как аргументы в другие функции и функции (определённые пользователем), можно частично определить (т.е. указать только чать формальных параметров). (Подробности в демонстрационном файле по ссылке ниже.)
В качестве демонстрации этих возможностей я сделал небольшой файл:
functional_programming_in_mathcad.xmcd . Сейчас этот файл не открывается в SMath Studio как минимум из-за того, что в нём имена переменных используют нижние индексы.
Отсюда предложение. Если это возможно, добавить элементы функционального стиля программирования в SMath Studio.
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
То, что немногие интересуются функциональным программированием, это понятно. Но вот совместимость с маткадовыми файлами, которые все эти фичи поддерживают, обеспечивать надо. Помнится, я делал функцию, выполняющую численное интегрирование методом Рунге-Кутта, в которую передавалась интегрируемая функция как аргумент. Это же ведь замечательная возможность --- описать обобщённый алгоритм того же численного интегрирования дифуров, а потом его использовать также как и любую другую функцию. Грустно.
Статус: Advanced Member
Группы: Developers, Registered Зарегистрирован: 28.08.2009(UTC) Сообщений: 127
Сказал(а) «Спасибо»: 19 раз Поблагодарили: 4 раз в 4 постах
Не думаю, что само ФП появится в скором времени в SMath, т.к. существуют еще достаточно много других, более распространенных задач, таких как более удобная работа с переменными и единицами измерений.
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
Согласен, это гораздо важнее. Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались, по юзабельности есть кривизна (в Маткаде можно набрать целый лист с решением ДЗ почти не пользуя клавиатуру). Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
Здравствуйте.
Маздайщик написал: Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались
Индексы сделал - будут в следующей версии.
Маздайщик написал: Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
Работе по созданию возможности использовать функции в качестве аргументов функций начало положено!
Первые результаты:
P.S.:
Маздайщик , большое спасибо за документ functional_programming_in_mathcad.xmcd!
С уважением, Андрей Ивашов.
Отредактировано пользователем 28 июня 2010 г. 1:43:50(UTC)
| Причина: Не указана
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
Набрёл на странную реакцию Mathcad-а:
То же самое, но в SMath Studio:
Есть ли причина, почему Маткад не справляется с заданием?
P.S.: Это тестовый расчёт, созданный для проверки SMath Studio.
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
В первую очередь хочу поблагодарить за рассмотрение моего предложения по возможностям функционального программирования. Действительно, уже реализованная возможность передавать функции как аргументы --- это уже немало. Как я писал ранее, можно написать обобщённые численные алгоритмы (интегрирования, дифференцирования, интегрирования дифференциальных уравнений), которые будут параметризовываться конкретными функциями. Возврат функций как результатов других функций --- уже гораздо менее используемая возможность (хотя можно, например, написать функционал, по данной функции возвращающий другую функцию, например, численную производную или функцию, обратную исходной). А частичное применение --- это уж совсем для ФП-эстетов.
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
smath написал: Набрёл на странную реакцию Mathcad-а:
Есть подозрение, что с символьными вычислениями возможности ФП в Mathcad'е не очень дружат. К сожалению, у меня сейчас на компьютере не установлен Mathcad и, вероятно, ещё долго не будет поставлен, т.к. я решил на свой домашний компьютер принципиально не ставить нелицензионное ПО, поэтому проверить не смогу. Приду на работу, там посмотрю и скажу. (Если можно скачать где-нибудь триальную или бета версию Mathcad'а, но при этом легальную, то дайте знать --- поставлю.)
Кстати, в Mathcad'е есть и другая хитрость. Даже наверное баг, но это баг не в коде, а в концепции. Если записать переменную с некоторым ненулевым индексом массива и ей сделать присваивание, например, так (перечисляю нажатия клавиш):
a[9:5
то сформируется массив из 10 элементов, первые 9 будут нулевыми, последний со значением 5. Если же таким манером присвоить функцию
b[9:f(x){x^2
и посмотреть значение, скажем 5-го элемента, то в численном (=) виде он будет равен нулю, а в символьном (.) --- функции (или наоборот, не помню). Т.е. формируется вектор, содержащий и числа (нули), и функцию, что конфликтует с другим аспектом Mathcad'а --- типизацией. Тоже, когда буду на работе, сделаю файлик и пришлю.
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
Маздайщик , большое спасибо за информацию.
С сегодняшнего дня можно потестировать текущую реализацию функционального программирования в SMath Studio через
веб-интерфейс Live .
Открыть в Облаке SMath С уважением, Андрей Ивашов.
P.S.: На данный момент функционал только развивается, а потому возможны "странные" ситуации.
Статус: Newbie
Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Откуда: Москва
Поблагодарили: 1 раз в 1 постах
Как и обещал, приношу файлик с демонстрацией бага Mathcad'а.
Вот он. Массив, последний элемент которого инициализирован функцией, получает тип массива функций, хотя остальные элементы содержат нули (что видно на функции at()). Как можно видеть на вызове функции g(2)=, вычисление падает на внутренней ошибке. Проверялось это на версии Mathcad 14.
Форум проекта SMath
»
SMath Studio
»
Предложения
»
Функциональное программирование в Mathcad
Быстрый переход
Форум проекта SMath
SMath Studio
- Скачать SMath Studio
--- Архив
--- Ночные сборки
- Примеры использования
- Вопросы по использованию
- Предложения
- Ошибки
Математика
- Документы
- Алгоритмы
- Математические задачи
Общение
- О проекте
- Общение
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.