【问题标题】:Inequality solving in prologprolog 中的不等式求解
【发布时间】:2014-08-25 18:57:51
【问题描述】:

我正在尝试解决 ax^2+bx+c>0 型不等式题使用prolog。

我可以使用此编码来解决问题吗? 两个

:-use_module(library(fd)).

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

【问题讨论】:

  • 如何实例化它,为什么使用有限域,域是什么?据我所知,fd 甚至不是图书馆。
  • stackoverflow.com/questions/9209058/… 从上面的链接我知道了。我也想知道如何将库插入到 .pl 文件中。# 符号根本不支持。即使在上面的程序。
  • 如前所述,fd 库对我来说是未知的。你可能应该使用clpfd...
  • fd 库来自 ECLiPSe Prolog。

标签: prolog swi-prolog clpfd


【解决方案1】:

据我所知,第一个 library(clpfd)(不是 fd)是一个有限域求解器。所以你需要提供有限的域。

其次,你提供一个等式约束,你应该提供一个不等式约束。

示例:

:- use_module(library(clpfd)).

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.

【讨论】:

  • term_variables/2的目的是什么
  • 我认为@ict 有兴趣生成像X > 5 这样的表达式,因此为了检索变量...
  • var(L), L = X 是一样的。但是为什么
  • 但不能保证L是一个简单的变量...我认为目的是提取X中的X5*X*X-2*X+7
  • @false,我完全同意这一点,我也会放弃那部分,但问题仍然很不清楚。 ICT 应该详细说明这一点... 旁注:有趣的是,一个名为 false 的用户说的是真的。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多