2012/12/10 Dmitry Simonov <[email protected]>: > Вов! Для этой задачи есть тру-вей: разложение на дизъюнкции конъюнкций (или > как альтернатива конъюнкции дизъюнкий), - они же "многочлены жигалкина". > Задача в принципе несложная для решения вручную на коленке. Да, только после трансформации входных данных в такой полигон, памяти для представления вектора потребуется при самом-самом оптимистичном раскладе 10Мбит и на коэффициенты соотвественно. Что-то меня это напрягает. Но за наводку спасибо, это мне немножко в другом месте может пригодиться (на самом деле там сделано нечто очень похожее, но можно окончательно формализовать).
Кстати, забыл добавить. 4. Конечно рассматриваю, но в низком приоритете, возможность поднять книгу дракона, вооружиться yacc'ом и на коленке соорудить парсер инфикса... > > --- > Dmitriy V. Simonov, > Perl & Python programmer > > > > 2012/12/10 Vladimir Timofeev <[email protected]> >> >> А вот есть задача. >> Надо в админке позволить людям задавать предикаты в общей форме, к >> примеру: >> (objects({"type":["type1","type2"]}) < 10 AND >> objects({"type":["type3"]}) < 5) OR special_condition("cond1") >> >> Синтаксис в примере выбран произвольно, набор допустимых ф-ций ограничен. >> В процессе работы эти предикаты будут проверяться в достаточно >> критичном к производительности коде. >> Кто нибудь решал похожие задачи? Как? >> >> У меня сейчас несколько вариантов решения: >> 1. Использовать perl + Safe >> - Кривой синтаксис (если JSON пользователи админки уже знают с грехом >> пополам, то учить еще perl явно выше их сил) >> - Безопасность... насколько я понимаю с Safe не все так просто... >> - Скорость... Safe её снижает >> >> 2. Использовать perl-решения... >> Math::Symbolic? >> Language::Expr? >> Я ничего не знаю о них и не хочется напороться на утечки памяти и/или >> неизлечимые проблемы производительности. >> >> 3. XS + внешняя библиотека, смотрел на >> http://www.partow.net/programming/exprtk/index.html - современный C++ >> шаблон на шаблоне... пока страшно, но буду туда еще смотреть, возможно >> >> http://www.lua.org - вот к этому варианту склоняюсь пока больше всего. >> Потому, что: >> - легко встраивается >> - знакомый синтаксис >> - очень быстрый вызов C функций >> - ему легко встроить вызов ф-ций типа objects или special_condition >> (из примера, т.к. они у меня и так на C реализованы), но если >> потребуется что-то из perl-овой части, то тоже пока проблем не вижу. >> >> -- >> Vladimir Timofeev <[email protected]> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org > > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Vladimir Timofeev <[email protected]> -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
