Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Функциональные языки: общие вопросы > Комбинатор раскрытия, есть???


Автор: Sajtran 13.1.2013, 10:25
Добрый день всем, вопрос теоретикам
Существует ли комбинатор-функтор раскрытия (назвал как мог) в Хаскеле или других ленивых языках?

Как он должен выглядеть:
OCombinator g (A1 A2 A3 A4) = g A1 A2 A3 A4

Собственно он мне нужен для  разбора функций. Например, для символьного вычисления производной, 

Автор: Ryukzak 3.4.2013, 10:54
Правильно ли я понял, что речь идёт о apply как в lisp-е? Где можно написать (f a b c) либо (apply f '(a b c)).

Если так, то основная проблема такой функции - её тип. Ответы можно искать в следующих направления:
1. GADT - все варианты аргументов функций необходимо свести к одному типу и использовать. Такое решение не может быть универсальным и будет работать только на функциях использующих ваш тип.
2. Расширения вокруг kind-ов - работы с типом выражений типа.
Код

Int :: *
Maybe :: * -> *
Maybe Bool :: *
a -> a :: *
[] :: * -> *
(->) :: * -> * -> *

Автор: beroal 10.4.2013, 17:40
Цитата(Sajtran @  13.1.2013,  07:25 Найти цитируемый пост)
Собственно он мне нужен для  разбора функций. Например, для символьного вычисления производной, 

Вам нужен исходный код функции? Его можно получить с помощью парсинга исходного кода — Hackage.haskell-src или Template Haskell. По-моему, это выходит за рамки языка и уж точно не имеет отношения к комбинаторной логике.

Автор: dlebedev 11.4.2013, 11:58
Давайте начнем с маленького. Какой тип должен иметь этот ваш комбинатор?

Автор: Sajtran 1.9.2014, 11:41
Цитата(dlebedev @ 11.4.2013,  13:58)
Давайте начнем с маленького. Какой тип должен иметь этот ваш комбинатор?

опс, и почему здесь уведомления не стоят

по идее что то вроде пары он должен возвращать

Код

OCombinator( f1.f2)=  \g.\f1.\f2. (g f1 f2)


"Комбинатор неподвижной точки" тоже вроде как типа не имеет 


например, простая задача из физики 

есть функция f(x1,x2,..)

погрешность её расчёта считается 
d f = [ (dx1* д f/д x1 )^2+ (dx2*д f/д x2)^2+..]^0.5  , где д - частная производная


было бы удобно получить функцию расчёта погрешности не напрягаясь?
d f = ... where ( dx1=0.3, dx2= 0.1, ..) ?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)