2009-04-20 4 views
6

я следующие два факта загружены в мой пролог переводчика:Пролог оператор старшинства и правила, соответствующие

foo(U+V,1). 
foo(U*V,2). 

Теперь я пытаюсь следующие запросы с тем, что результаты:

foo(x*x+x,R). --> R = 1 
foo(x+x*x,R). --> R = 1 
foo(x*x*x,R). --> R = 2 

Сейчас я стараюсь с следующий запрос:

foo(x*x-x,R). --> no 

Как я понимаю, это объясняется тем, как приоритет оператора строит выражение дерева :

x+x*x --> +   so it matches with --> + 
     /\        /\ 
      x *        U V 
      /\ 
      x x 

x-x*x --> -   DOES NOT matches any fact. 
     /\        
      x *         
      /\ 
      x x 

Это объяснение правильно?

ответ

4

Да, это правильно.

Приоритет оператора по умолчанию определяется как естественный, т. Е. Использует нормальный математический приоритет. Но если вам это не нравится, вы можете переопределить его.

Является ли изменение приоритета отличной идеей, это другое дело, оно эффективно изменяет синтаксис Prolog и может привести к проблемам синтаксического анализа. Особенно, если вы измените приоритет операторов синтаксиса Prolog с приоритетом выше 1000.

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