[бредятинка] wishful programming
От: Кодт Россия  
Дата: 28.07.15 15:31
Оценка:
Сейчас налетел на очепятку вот такого рода
// дано
class Contents;
struct Size;

class Image;
class Icon {
  .....
  Image AsImage() const;
  .....
};

class Controller {
  .....
  Icon GetIcon(Contents, Size) const;
  .....
};

// хотел
Image image = controller.GetIcon(contents, size).AsImage();
// написал
Image image = controller.GetIcon(contents, size.AsImage());


И подумалось: а БЫЛО БЫ КРУТО просовывать пожелания ("AsImage" — это пожелание) изнутри наружу.
На перегрузках и шаблонах это делается несложно, хотя и многословно, если нет соответствующего фреймворка или поддержки языка
class Controller {
  .....
  template<class Wish>
  auto GetIcon(Contents contents, Size size, Wish wish) -> auto {
    return apply_wish(GetIcon(contents, size), wish);
  }
  .....
};

Image image = controller.GetIcon(contents, size, AsImage);

Следующим шагом будет свёртка пожеланий с аргументами (что у меня и произошло в опечатке) — и дальнейший вывод пожелания из типа аргумента.
class Controller {
  .....
  template<class Size_Wish>
  auto GetIcon(Contents contents, Size_Wish size) -> auto {
    return apply_wish(GetIcon(contents, get_pure(size)), get_wish(size));
  }
  .....
};

Image image = controller.GetIcon(contents, make_wish(size, AsImage));

Ну и наконец, легитимизация синтаксиса: make_wish(x,y) == x.y

Дело запахло аппликативными функторами...
Перекуём баги на фичи!
Re: [бредятинка] wishful programming
От: jazzer Россия Skype: enerjazzer
Дата: 29.07.15 01:39
Оценка: :)))
Здравствуйте, Кодт, Вы писали:

К>Ну и наконец, легитимизация синтаксиса: make_wish(x,y) == x.y

К>Дело запахло аппликативными функторами...

Молись и кайся!!!
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: [бредятинка] wishful programming
От: _NN_ www.nemerleweb.com
Дата: 30.07.15 18:54
Оценка:
Здравствуйте, Кодт, Вы писали:

Дык даешь на полную катушку.

#include <iostream>
#include <functional>

using namespace std;

template<typename A, typename B, typename C>
function<C(A)> operator>>(function<B(A)> f, function<C(B)> g)
{
    return [=](A a) { return g(f(a)); };
}

int main()
{
    function<int(double)> f = [=](double d) {return static_cast<int>(d);  };
    function<char(int)> g = [=](int i) {return static_cast<char>(i); };

    cout << (f >> g)(65);


    return 0;
}


Ну и далее << , >>= , <<= по вкусу и можно для простых лямбд
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: [бредятинка] wishful programming
От: Кодт Россия  
Дата: 30.07.15 23:59
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Дык даешь на полную катушку.

_NN>Ну и далее << , >>= , <<= по вкусу и можно для простых лямбд

Конвееры нафигачить — дело нехитрое. Я-то говорю про то, чтобы лифтить функции...
(servile foo) (x `wishing` bar) == bar (foo x)

Вот такой тернарный оператор, понимаешь! И обобщить его на цепочки функций и цепочки аргументов. Примерно так же, как монады и аппликативные функторы. Только навыворот. В общем, тут покумекать требуется.
Перекуём баги на фичи!
Re: [бредятинка] wishful programming
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.07.15 07:00
Оценка:
Здравствуйте, Кодт, Вы писали:


К>// хотел

К>Image image = controller.GetIcon(contents, size).AsImage();
К>// написал
К>Image image = controller.GetIcon(contents, size.AsImage());
К>[/c]

К>И подумалось: а БЫЛО БЫ КРУТО просовывать пожелания ("AsImage" — это пожелание) изнутри наружу.

Так и не понял, что это будет за семантика, и чем этот синтаксис лучше оригинального.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: [бредятинка] wishful programming
От: Кодт Россия  
Дата: 31.07.15 11:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

К>>И подумалось: а БЫЛО БЫ КРУТО просовывать пожелания ("AsImage" — это пожелание) изнутри наружу.

S>Так и не понял, что это будет за семантика, и чем этот синтаксис лучше оригинального.

Фактически, это contiunation и, похоже, монада writer.

Чем это лучше? Тем, что пожелания можно не только накладывать снаружи на формулу (как я хотел, но опечатался),
-- пользовательские функции
f :: X -> Y
postprocess :: Y -> Z

x :: X
z :: Z

z = run_wish( lift(f) (x `with_wish` postprocess) )
-- эквивалентно (только очень громоздко)
z = postprocess(f(x))

но и возвращать вовне, и пусть вызывающая сторона выполнит пожелание там и тогда, где и когда сочтёт нужным.

Скажем, в рамках типа пожелания "AsImage" могут быть значения "asTransparentImage", "asSolidImage", "asMockImage"
Перекуём баги на фичи!
Re: [бредятинка] wishful programming
От: Ops Россия  
Дата: 01.08.15 09:03
Оценка:
Здравствуйте, Кодт, Вы писали:

К>И подумалось: а БЫЛО БЫ КРУТО просовывать пожелания ("AsImage" — это пожелание) изнутри наружу.


За Wish, вообще-то, экспу снимают.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: [бредятинка] wishful programming
От: Кодт Россия  
Дата: 03.08.15 10:23
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>За Wish, вообще-то, экспу снимают.


А можно без этих игроманских идиом? Ниччего не понял, кроме того, что наезжаешь.
Перекуём баги на фичи!
Re[3]: [бредятинка] wishful programming
От: Ops Россия  
Дата: 03.08.15 11:16
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>А можно без этих игроманских идиом? Ниччего не понял, кроме того, что наезжаешь.


Это шутка была, а не наезд. В игровой системе DND есть такой скилл, теоретически неограниченный, но расплачиваешься за него старением или потерей опыта, в зависимости от системы. Ну и в довесок, жадные желания искажаются ДМовским произволом.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: [бредятинка] wishful programming
От: Кодт Россия  
Дата: 03.08.15 13:32
Оценка: +1
Здравствуйте, Ops, Вы писали:

Ops>Это шутка была, а не наезд. В игровой системе DND есть такой скилл, теоретически неограниченный, но расплачиваешься за него старением или потерей опыта, в зависимости от системы. Ну и в довесок, жадные желания искажаются ДМовским произволом.


Старение в обмен на желание? Старина Оноре, Шагреневая кожа...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.