2014-08-25 2 views
1

Я пытаюсь решить ax^2 + bx + c> 0 вопрос о неравенстве типа с использованием пролога.Решение неравномерности в прологе

Могу ли я использовать это кодирование для решения проблемы. два

:-use_module(library(fd)). 

compute(L=R, X) :- 
     term_variables(L, [X]), 
     L #= R. 
+0

Как вы его экземпляр, почему вы используете конечный домены, какие существуют домены? Насколько я знаю, 'fd' даже не является библиотекой. –

+0

http://stackoverflow.com/questions/9209058/how-to-do-arithmetic-expression-evaluation-in-prolog из приведенной выше ссылки я узнал об этом. Также я хочу знать, как вставить библиотеку в .pl file.The # sign doen; t поддержка вообще. Даже в вышеуказанной программе. – ict

+0

Как уже упоминалось, библиотека 'fd' мне неизвестна. Вероятно, вы должны использовать 'clpfd' ... –

ответ

0

Первый library(clpfd) (не fd) - насколько я знаю - конечный домен решатель. Поэтому вам необходимо предоставить домены конечных.

Во-вторых, вы предоставляете ограничение равенства, вы должны обеспечить ограничение неравенства.

Пример:

:- use_module(library(cplfd)). 

compute(L=R,X,Low,High) :- 
    term_variables(L, [X]), 
    X in Low..High, 
    L #> R, 
    label([X]). 

Или когда никакие домены не указаны:

compute(L=R,X) :- 
    term_variables(L,[X]), 
    L #> R. 

А потом инстанцирует:

?- compute(5*X*X-2*X+7=0,X). 
2*X#=_G1114, 
_G1128*X#=_G1126, 
5*X#=_G1128, 
_G1152+_G1114#=_G1126, 
_G1152 in -6..sup, 
_G1152+7#=_G1174, 
_G1174 in 1..sup. 
+1

Какова цель term_variables/2 – false

+0

Я думаю, что @ict заинтересован в генерации какого-то выражения типа 'X> 5', таким образом, чтобы получить переменную ... –

+0

var (L), L = X будет одна и та же. Но почему вообще – false

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