1 Pages (10 items)
Функциональное программирование в Mathcad - Messages
#1 Posted: 5/21/2010 2:07:38 PM
Здравствуйте! Я недавно наткнулся на программу SMath Studio, которая вполне может заменить Mathcad. Однако, я в ней не нашёл одного интересного и любиого мною функционала --- элементов функционального стиля программирования. Дело в том, что функции в Маткаде можно передавать как аргументы в другие функции и функции (определённые пользователем), можно частично определить (т.е. указать только чать формальных параметров). (Подробности в демонстрационном файле по ссылке ниже.)
В качестве демонстрации этих возможностей я сделал небольшой файл: functional_programming_in_mathcad.xmcd. Сейчас этот файл не открывается в SMath Studio как минимум из-за того, что в нём имена переменных используют нижние индексы.
Отсюда предложение. Если это возможно, добавить элементы функционального стиля программирования в SMath Studio.
В качестве демонстрации этих возможностей я сделал небольшой файл: functional_programming_in_mathcad.xmcd. Сейчас этот файл не открывается в SMath Studio как минимум из-за того, что в нём имена переменных используют нижние индексы.
Отсюда предложение. Если это возможно, добавить элементы функционального стиля программирования в SMath Studio.
#2 Posted: 6/11/2010 8:39:23 PM
То, что немногие интересуются функциональным программированием, это понятно. Но вот совместимость с маткадовыми файлами, которые все эти фичи поддерживают, обеспечивать надо. Помнится, я делал функцию, выполняющую численное интегрирование методом Рунге-Кутта, в которую передавалась интегрируемая функция как аргумент. Это же ведь замечательная возможность --- описать обобщённый алгоритм того же численного интегрирования дифуров, а потом его использовать также как и любую другую функцию. Грустно.
#3 Posted: 6/16/2010 1:14:37 PM
Не думаю, что само ФП появится в скором времени в SMath, т.к. существуют еще достаточно много других, более распространенных задач, таких как более удобная работа с переменными и единицами измерений.
#4 Posted: 6/16/2010 6:05:29 PM
Согласен, это гораздо важнее. Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались, по юзабельности есть кривизна (в Маткаде можно набрать целый лист с решением ДЗ почти не пользуя клавиатуру).
Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
#5 Posted: 6/25/2010 8:18:18 PM
Здравствуйте.
Индексы сделал - будут в следующей версии.

Работе по созданию возможности использовать функции в качестве аргументов функций начало положено!
Первые результаты:

P.S.: Маздайщик, большое спасибо за документ functional_programming_in_mathcad.xmcd!
С уважением, Андрей Ивашов.
WroteТакже нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались
Индексы сделал - будут в следующей версии.
WroteНо, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
Работе по созданию возможности использовать функции в качестве аргументов функций начало положено!
Первые результаты:
P.S.: Маздайщик, большое спасибо за документ functional_programming_in_mathcad.xmcd!
С уважением, Андрей Ивашов.
#6 Posted: 6/27/2010 6:42:01 PM
Набрёл на странную реакцию Mathcad-а:

То же самое, но в SMath Studio:

Есть ли причина, почему Маткад не справляется с заданием?
P.S.: Это тестовый расчёт, созданный для проверки SMath Studio.
То же самое, но в SMath Studio:
Есть ли причина, почему Маткад не справляется с заданием?
P.S.: Это тестовый расчёт, созданный для проверки SMath Studio.
#7 Posted: 6/28/2010 12:02:54 PM
В первую очередь хочу поблагодарить за рассмотрение моего предложения по возможностям функционального программирования. Действительно, уже реализованная возможность передавать функции как аргументы --- это уже немало. Как я писал ранее, можно написать обобщённые численные алгоритмы (интегрирования, дифференцирования, интегрирования дифференциальных уравнений), которые будут параметризовываться конкретными функциями. Возврат функций как результатов других функций --- уже гораздо менее используемая возможность (хотя можно, например, написать функционал, по данной функции возвращающий другую функцию, например, численную производную или функцию, обратную исходной). А частичное применение --- это уж совсем для ФП-эстетов.
#8 Posted: 6/28/2010 12:06:30 PM
WroteНабрёл на странную реакцию Mathcad-а:
Есть подозрение, что с символьными вычислениями возможности ФП в Mathcad'е не очень дружат. К сожалению, у меня сейчас на компьютере не установлен Mathcad и, вероятно, ещё долго не будет поставлен, т.к. я решил на свой домашний компьютер принципиально не ставить нелицензионное ПО, поэтому проверить не смогу. Приду на работу, там посмотрю и скажу. (Если можно скачать где-нибудь триальную или бета версию Mathcad'а, но при этом легальную, то дайте знать --- поставлю.)
Кстати, в Mathcad'е есть и другая хитрость. Даже наверное баг, но это баг не в коде, а в концепции. Если записать переменную с некоторым ненулевым индексом массива и ей сделать присваивание, например, так (перечисляю нажатия клавиш):
a[9:5
то сформируется массив из 10 элементов, первые 9 будут нулевыми, последний со значением 5. Если же таким манером присвоить функцию
b[9:f(x){x^2
и посмотреть значение, скажем 5-го элемента, то в численном (=) виде он будет равен нулю, а в символьном (.) --- функции (или наоборот, не помню). Т.е. формируется вектор, содержащий и числа (нули), и функцию, что конфликтует с другим аспектом Mathcad'а --- типизацией. Тоже, когда буду на работе, сделаю файлик и пришлю.
#9 Posted: 6/29/2010 7:52:36 AM
Маздайщик, большое спасибо за информацию.
С сегодняшнего дня можно потестировать текущую реализацию функционального программирования в SMath Studio через веб-интерфейс Live.
[LIVE width=529 height=266]http://smath.info/live/?file=1269[/LIVE]
С уважением, Андрей Ивашов.
P.S.: На данный момент функционал только развивается, а потому возможны "странные" ситуации.
С сегодняшнего дня можно потестировать текущую реализацию функционального программирования в SMath Studio через веб-интерфейс Live.
[LIVE width=529 height=266]http://smath.info/live/?file=1269[/LIVE]
С уважением, Андрей Ивашов.
P.S.: На данный момент функционал только развивается, а потому возможны "странные" ситуации.
#10 Posted: 7/7/2010 9:48:32 AM
Как и обещал, приношу файлик с демонстрацией бага Mathcad'а. Вот он. Массив, последний элемент которого инициализирован функцией, получает тип массива функций, хотя остальные элементы содержат нули (что видно на функции at()). Как можно видеть на вызове функции g(2)=, вычисление падает на внутренней ошибке. Проверялось это на версии Mathcad 14.
1 Pages (10 items)
-
New Posts
-
No New Posts