Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Вход


Опции
К последнему сообщению К первому непрочитанному
Offline Маздайщик  
#1 Оставлено : 21 мая 2010 г. 21:07:38(UTC)
Маздайщик

Статус: Newbie

Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Мужчина
Откуда: Москва

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

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

Отсюда предложение. Если это возможно, добавить элементы функционального стиля программирования в SMath Studio.

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

Offline Маздайщик  
#2 Оставлено : 12 июня 2010 г. 3:39:23(UTC)
Маздайщик

Статус: Newbie

Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Мужчина
Откуда: Москва

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


Статус: Advanced Member

Группы: Developers, Registered
Зарегистрирован: 28.08.2009(UTC)
Сообщений: 127

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 4 раз в 4 постах
Не думаю, что само ФП появится в скором времени в SMath, т.к. существуют еще достаточно много других, более распространенных задач, таких как более удобная работа с переменными и единицами измерений.
Offline Маздайщик  
#4 Оставлено : 17 июня 2010 г. 1:05:29(UTC)
Маздайщик

Статус: Newbie

Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Мужчина
Откуда: Москва

Поблагодарили: 1 раз в 1 постах
Согласен, это гораздо важнее. Также нужно добавить нижние индексы (которые являются частью имени переменной и вводятся через точку), во всяком случае, в майской версии они не поддерживались, по юзабельности есть кривизна (в Маткаде можно набрать целый лист с решением ДЗ почти не пользуя клавиатуру).
Но, подозреваю, что ФП будет геморно добавлять, т.к. в Маткаде оно лежит в основе (функции по определению частично применимы).
Offline smath  
#5 Оставлено : 26 июня 2010 г. 3:18:18(UTC)
smath


Статус: 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)  | Причина: Не указана

Offline smath  
#6 Оставлено : 28 июня 2010 г. 1:42:01(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 640 раз
Поблагодарили: 262 раз в 102 постах
Набрёл на странную реакцию Mathcad-а:


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


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

P.S.: Это тестовый расчёт, созданный для проверки SMath Studio.
Offline Маздайщик  
#7 Оставлено : 28 июня 2010 г. 19:02:54(UTC)
Маздайщик

Статус: Newbie

Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Мужчина
Откуда: Москва

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

Статус: 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'а --- типизацией. Тоже, когда буду на работе, сделаю файлик и пришлю.
Offline smath  
#9 Оставлено : 29 июня 2010 г. 14:52:36(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 640 раз
Поблагодарили: 262 раз в 102 постах
Маздайщик, большое спасибо за информацию.

С сегодняшнего дня можно потестировать текущую реализацию функционального программирования в SMath Studio через веб-интерфейс Live.

Открыть в Облаке SMath

С уважением, Андрей Ивашов.

P.S.: На данный момент функционал только развивается, а потому возможны "странные" ситуации.
Offline Маздайщик  
#10 Оставлено : 7 июля 2010 г. 16:48:32(UTC)
Маздайщик

Статус: Newbie

Группы: Registered
Зарегистрирован: 19.05.2010(UTC)
Сообщений: 7
Мужчина
Откуда: Москва

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