|
|
метафункции
Добавлено: 20 окт 10 23:02
|
К обсуждению предлагается задача разработки механизма метафункций для некоторого гипотетического функционально-ориентированного языка программирования. Пусть метафункция это функция, которая в качестве входного параметра получает функцию, в качестве результата возвращает трансформацию входной функции. Примеры: интеграл и производная. Для реализации такого дела нужен продвинутый и удобный reflection.
|
|
|
| |
| |
|
На: метафункции
Добавлено: 21 окт 10 2:25
|
Автор: shuklin Для реализации такого дела нужен продвинутый и удобный reflection. |
|
Зачем??????? int f1(int x){....} int f2(int x){....} ..... int fn(int x){....}
double g1(double x, double y){....} double g2(double x, double y){....} ..... double gn(double x, double y){....}
typedef int(*Int_X)(int); typedef double(*Double_XY)(double,double);
Double_XY MetaF(Int_X input){ ..... }
или так... class Function{ .... }; class F1:public Function{....}; class F2:public Function{....}; class MetaF:public Function{ ...... Function f(const Function& input){ .... } };
я уже молчу про ФП, там это вообще в порядке вещей. (lambda f,x: f(x,y))((lambda x,y: x+y),10)(3)
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 2:28
|
Автор: Vestnik
А для чего это? |
|
А как без этого?????  любое обучение/адаптация, по сути -- функция изменяющая функцию.
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 14:34
|
Автор: Андрей
Уже обсуждалось в теме Метаалгоритмы, автор - shuklin... |
|
хотелось бы рассмотреть с разных сторон реализацию reflection требуемую для этого дела
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 14:36
|
"А как без этого?????  "  В качестве примера рассмотрим метафункцию возвращающую в результате производную от функции-параметра. Нужно будет выполнить символьное дифференцирование. Ну и как без этого ?????
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 17:30
|
Автор: shuklin В качестве примера рассмотрим метафункцию возвращающую в результате производную от функции-параметра. Нужно будет выполнить символьное дифференцирование.
|
|
Одному формальному представлению функции (символу) хотите однозначно противопоставить другое формальное представление функции (символ). Это противопоставление (отношение) станет производной/интегралом или еще чем-то. Множество отношений будете называть метафункциями. Станет ли вам от этого легче? Куда дальше?
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 18:36
|
я практик, я так сложно не понимаю ))) мне подавай всякие API, reflection, emit, ... )))
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 19:52
|
Автор: shuklin
"А как без этого????? "  В качестве примера рассмотрим метафункцию возвращающую в результате производную от функции-параметра. Нужно будет выполнить символьное дифференцирование. Ну и как без этого ?????
|
|
не обязательно. Это если приспичило в конце формулу производной получить. А если потом надо только значения получать, то достаточно составить функцию которая получает дискретезированную величину производной в точке. И это кстати чаще нужно, чем сама функция. class Function_F_F:public Function{...public: virtual double f(double x){....}...}; class F1:public Function_F_F{....}; class D_F_F:public Function_F_F{ private: Function_F_F* fun; public: D_F_F(Function_F_F* fun):fun(fun){} virtual double f(double x){ return fun(x-Eps)-fun(x+Eps); } ............ }; class MF:public Function{ public: Function_F_F* f(Function_F_F* fun){ return new D_F_F(fun); } };
Здесь функция D_F_F(x) эквивалентна (с ошибкой конечно) функции F1'(x).
|
|
|
|
На: метафункции
Добавлено: 21 окт 10 19:54
|
Автор: shuklin я практик, я так сложно не понимаю ))) мне подавай всякие API, reflection, emit, ... ))) |
|
а я программист и хочу сказать, что формализация формализма вам не поможет. дописано: Метаданные - это статический формат формализованного потока данных. Метафункции предполагают динамический формат формализованного потока. Выразить словами можно, но вот реализовать ..... Формат - это алгебра отношений. Алгебра не может быть динамической по определению. Это и не нужно. Хотя интересно об этом подумать. дописано: подумал. спасибо за идею  Пойду писать фантастику о путешествиях во времени.
|
|
|
NO. Сообщений: 10700 |
 |
|
На: метафункции
Добавлено: 22 окт 10 2:00
|
(5) -- голая константа (целое 5) -- типизированная ((имя строка Иванов) (возраст число 25)) -- запись или таблица на одну строку (человек (Иванов 25)) -- нужно дешифровать 'человек потом подставить туда остаток (толпа -- аналогично, уже настоящая таблица (Иванов 25) (Петров 26) (Сидоров 27) (паспорт 8854 456464) -- ссылка предусмотренного формата (escape комментарий эта строка пропускается если не нашелся обработчик) )
|
|
|
|
На: метафункции
Добавлено: 22 окт 10 8:26
|
Автор: NO. толпа -- аналогично, уже настоящая таблица
|
|
Это вы метаданные нам демонстрируете, а товарищу нужны метаФУНКЦИИ.
|
|
|
NO. Сообщений: 10700 |
 |
|
На: метафункции
Добавлено: 22 окт 10 8:33
|
Тут можно рассмотреть одну функцию Имя->Возраст, остальные нужно допонимать. Даже 5 можно понимать как функцию int 5(void) {return 5;}
|
|
|
|
На: метафункции
Добавлено: 22 окт 10 9:36
|
Автор: NO. Тут можно рассмотреть одну функцию Имя->Возраст, остальные нужно допонимать.
|
|
"Имя->Возраст" - это статическое отношение (оператор над символами), которое сложно назвать 'мета'функционалом или динамическим отношением. Подобный оператор можно применить и к функциям, но статическая сущность его не изменится. Описать пространство динамических отношений можно, как множество статических отношений. Яркий пример - таблица первых производных. Она представляет множество статических отношений между функциями. "Отношение" - это взятие производной (как оператор). А "статическое" - потому, что каждой конкретной функции, противопоставлена только одна производная функция. Вот, если бы не только одна, а в зависимости от какого-то дополнительного параметра, тогда бы шла речь о динамике отношений или метафункционале. Но такое сложно даже представить.
|
|
|
|