Функциональное программирование в Mathcad

Функциональное программирование в Mathcad - Messages

#1 Posted: 5/21/2010 2:07:38 PM
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

Здравствуйте! Я недавно наткнулся на программу SMath Studio, которая вполне может заменить Mathcad. Однако, я в ней не нашёл одного интересного и любиого мною функционала --- элементов функционального стиля программирования. Дело в том, что функции в Маткаде можно передавать как аргументы в другие функции и функции (определённые пользователем), можно частично определить (т.е. указать только чать формальных параметров). (Подробности в демонстрационном файле по ссылке ниже.)

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

Отсюда предложение. Если это возможно, добавить элементы функционального стиля программирования в SMath Studio.
#2 Posted: 6/11/2010 8:39:23 PM
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

То, что немногие интересуются функциональным программированием, это понятно. Но вот совместимость с маткадовыми файлами, которые все эти фичи поддерживают, обеспечивать надо. Помнится, я делал функцию, выполняющую численное интегрирование методом Рунге-Кутта, в которую передавалась интегрируемая функция как аргумент. Это же ведь замечательная возможность --- описать обобщённый алгоритм того же численного интегрирования дифуров, а потом его использовать также как и любую другую функцию. Грустно.
#3 Posted: 6/16/2010 1:14:37 PM
build_your_web

build_your_web

4 likes in 127 posts.

Group: User

Не думаю, что само ФП появится в скором времени в SMath, т.к. существуют еще достаточно много других, более распространенных задач, таких как более удобная работа с переменными и единицами измерений.
#4 Posted: 6/16/2010 6:05:29 PM
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

Согласен, это гораздо важнее. Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались, по юзабельности есть кривизна (в Маткаде можно набрать целый лист с решением ДЗ почти не пользуя клавиатуру).
Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
#5 Posted: 6/25/2010 8:18:18 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3731 posts.

Group: Super Administrator

Здравствуйте.

Wrote

Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались


Индексы сделал - будут в следующей версии.


Wrote

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


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


P.S.: Маздайщик, большое спасибо за документ functional_programming_in_mathcad.xmcd!

С уважением, Андрей Ивашов.
#6 Posted: 6/27/2010 6:42:01 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3731 posts.

Group: Super Administrator

Набрёл на странную реакцию Mathcad-а:


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


Есть ли причина, почему Маткад не справляется с заданием?

P.S.: Это тестовый расчёт, созданный для проверки SMath Studio.
#7 Posted: 6/28/2010 12:02:54 PM
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

В первую очередь хочу поблагодарить за рассмотрение моего предложения по возможностям функционального программирования. Действительно, уже реализованная возможность передавать функции как аргументы --- это уже немало. Как я писал ранее, можно написать обобщённые численные алгоритмы (интегрирования, дифференцирования, интегрирования дифференциальных уравнений), которые будут параметризовываться конкретными функциями. Возврат функций как результатов других функций --- уже гораздо менее используемая возможность (хотя можно, например, написать функционал, по данной функции возвращающий другую функцию, например, численную производную или функцию, обратную исходной). А частичное применение --- это уж совсем для ФП-эстетов.
#8 Posted: 6/28/2010 12:06:30 PM
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

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
Andrey Ivashov

Andrey Ivashov

2269 likes in 3731 posts.

Group: Super Administrator

Маздайщик, большое спасибо за информацию.

С сегодняшнего дня можно потестировать текущую реализацию функционального программирования в 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
Маздайщик

Маздайщик

1 likes in 7 posts.

Group: User

Как и обещал, приношу файлик с демонстрацией бага Mathcad'а. Вот он. Массив, последний элемент которого инициализирован функцией, получает тип массива функций, хотя остальные элементы содержат нули (что видно на функции at()). Как можно видеть на вызове функции g(2)=, вычисление падает на внутренней ошибке. Проверялось это на версии Mathcad 14.
  • New Posts New Posts
  • No New Posts No New Posts