Логическое программирование на С - PullRequest
5 голосов
/ 04 сентября 2011

Я пытаюсь реализовать некоторые алгоритмы планирования ИИ в C, но застрял с основной концепцией:)
Прежде чем перейти к основной проблеме, я попытался реализовать небольшую инфраструктуру, которая поддерживала бы логику высказываний:

FORMULA f = PROPOSITION(a + 3 > 0);
FORMULA g = PROPOSITION(is_smaller_than(b, c));
f = AND(NOT(f), g);

Теперь проблема в том, что я хотел бы не оценивать выражения типа «a + 3> 0» в момент определения формулы, а на более позднем этапе:

bool res = EVALUATE(f);

Я предполагаю, что замыкания были бы полезны в этом случае, но, к сожалению, я также хотел бы придерживаться C99.

Любая идея?
Как насчет расширения этого для предикатной логики?

Конечной целью (в идеале) будет создание библиотеки планирования искусственного интеллекта, которую можно напрямую подключить к приложению, а не получение проблемы в виде строк программы STRIPS.

Спасибо

1 Ответ

1 голос
/ 02 октября 2011

ОК,

Как уже говорилось выше, я решил проблему, используя структуру с указателем метода и данными в нем.Это наиболее распространенный способ моделирования замыканий в C.

Моя реализация доступна здесь: https://github.com/pmilosev/clumsy

...