AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2007, 10:00   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Элементы функционального программирования в Axapta
Попытка эмулировать map(), filter() и reduce() средствами Аксапты:

X++:
static void FuncTest(Args _args)
{
    gm_containerCollection      list = new gm_containerCollection([1, 2, 3, 4, 5, 6, 7, 8]);
    ;
    // исходный список
    info(list.toString());    // 1, 2, 3, 4, 5, 6, 7, 8

    // map
    list = list.map('x * x');
    info(list.toString());    // 1, 4, 9, 16, 25, 36, 49, 64

    list = list.map('x + x');
    info(list.toString());    // 2, 8, 18, 32, 50, 72, 98, 128

    // filter
    list = list.filter('x > 10');   // 18, 32, 50, 72, 98, 128
    info(list.toString());

    // можно даже так
    list = list.filter('x > 50').map('x + 1');  // 73, 99, 129
    info(list.toString());

    // reduce
    info(list.reduce('x + y')); // 301

    // одной строкой
    info(new gm_containerCollection([1, 2, 3, 4, 5, 6, 7, 8]).map('x * x').map('x + x').filter('x > 10').filter('x > 50').map('x + 1').reduce('x + y'));
}
X++:
static void FuncTest2(Args _args)
{
    gm_containerCollection      list = new gm_containerCollection(['adfsd', 'bsdf', 'cwer']);
    ;
    // исходный список
    info(list.toString());    // adfsd, bsdf, cwer

    // map
    list = list.map('substr(x, 1, 1)');
    info(list.toString());    // a, b, c

    // filter
    list = list.filter('x > "a"');
    info(list.toString());    // b, c

    // reduce
    info(list.reduce('x + y')); // 'bc'

    // одной строкой
    info(new gm_containerCollection(['adfsd', 'bsdf', 'cwer']).map('substr(x, 1, 1)').filter('x > "a"').reduce('x + y'));
}
1. Идея навеяна вот этим постом (ContainerIterator).
2. Рассматривайте данный проект, как развлечение, а не как рекомендацию для промышленного использования.

Ограничения:

1. Ошибки, возникшие при выполнении lambda-функции не контролируются разработчиком. Наверное, этого можно избежать, использую xppCompiler вместо runbuf.
2. Корректность написания lambda-функции никак не проверяется на этапе компиляции. Данного ораничения избежать нельзя никак.
Вложения
Тип файла: xpo ax_decl.xpo (11.4 Кб, 198 просмотров)
За это сообщение автора поблагодарили: Мариночка (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 12.04.2007 16:10
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 22.11.2006 15:20
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:42.