2012-02-13 3 views
0

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

?- query(2*X + 3*Y >= 3*Z) 

Теперь, что я хотел бы сделать, это программа пролога захватить выражение неравенства, так что я может иметь вышеуказанное неравенство в переменных, как показано ниже:

переменная «Lhs» будет иметь 2*X + 3*Y переменная «Rhs» будет иметь 3*Z Теперь я хочу неравенство участвующих быть также назначены где-то (в переменной называется Опер ??) , так что скажем что-то вроде Lhs Opr Rhs будет означать в точности как «2*X + 3*Y >= 3*Z» ..

Это общая форма сценария, над которым я работаю. Я как-то хочу, чтобы определение «неравенство» было идентифицировано, чтобы я мог использовать его позже в моем коде.

Я работаю над Eclipse-CLP с библиотекой IC.

ответ

2

Вы можете использовать Univ разобрать inequaliy:

Eq =.. [Op,Lhs,Rhs], 

Это работает в обоих направлениях.

+0

спасибо, тот сработал ..! – kallakafar

3

Вы можете сделать это с любым прологом системы, используя univ/2 оператора:

parse_ops(Expr, Lhs, Rhs, Op):- 
    Expr =.. [Op, Lhs, Rhs]. 

?- parse_ops(2*X + 3*Y >= 3*Z, Lhs, Rhs, Op). 
Lhs = 2*X+3*Y, 
Rhs = 3*Z, 
Op = (>=). 
+0

спасибо, что действительно помогло. получил логику! – kallakafar

0

Это должно быть в состоянии просто сделать:

parse_query(LHS >= RHS, LHS, RHS). 

?- parse_query(2*X + 3*Y >= 3*Z, LHS, RHS). 
LHS=2*X + 3*Y 
RHS=3*Z 

Что вам нужно беспокоиться здесь с заказать операций, которые использует Parser при чтении вашего запроса. Взгляните на the op/3 operator for eclipse-clp и the op/3 operator doc for swi-prolog. Обратите внимание, что число приоритетов для неравенств выше, чем операторов. Это означает, что при анализе запроса (2 * X + 3 * Y> = 3 * Z) оператор> = становится функтором. Попробуйте использовать предикат отображения, чтобы сделать это понятным.

?- display(2*X + 3*Y >= 3*Z). 
>=(+(*(2,X), *(3,Y)), *(3,Z)) 

 Смежные вопросы

  • Нет связанных вопросов^_^