我是 Prolog 新手,所以请保持温柔。
这是我的规则:
solve(X) :- A = B, A is (7 * (X - 2)), B is (3 * (X + 4)).
显然,这里的正确答案是6.5
。如果我把它交给 Prolog,它会证实:
| ?- solve(6.5).
yes
然而,如果我要求 Prolog 做这些肮脏的工作,它会抛出一个错误:
| ?- solve(X).
uncaught exception: error(instantiation_error,(is)/2)
我完全承认这里发生的一切都是由于我对 Prolog 的误解。有人可以向我解释如何让它工作或为什么它不起作用吗?
在序言中,is
是算术求值运算符。它计算右侧表达式的结果,并将其分配给左侧的变量。
要计算的表达式必须仅包含数字和算术运算符/函数。换句话说,要评估一个表达式,is
必须已经知道其中的所有数字。
另一种说法是is是“单向”的 http://www.swi-prolog.org/pldoc/doc_for?object=(is)/2, 不像=
这是双向的。这就是你所期望的。这就是你得到的错误的含义。
解决这样的方程(约束)是一个人的工作约束求解器 http://www.swi-prolog.org/pldoc/man?section=clpqr.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)