我正在尝试模拟一个简单的 3 变量方程(如欧姆定律),其中 RESULT=NUMERATOR/DENOMINATOR。(但实际上在我的情况下,我使用的是纯整数)。
我制定了三个规则;如果我自己定义它们并使用出现在“is”左侧的“hole”变量调用它们,这似乎可以正常工作,但我无法弄清楚如何调用适当的规则,具体取决于在我放置变量而不是整数的位置...
以下是我提出的规则(按照我定义它们的顺序):
equation(RESULT, NUMERATOR, DENOMINATOR) :-
RESULT is NUMERATOR // DENOMINATOR.
equation(RESULT, NUMERATOR, DENOMINATOR) :-
NUMERATOR is DENOMINATOR * RESULT.
equation(RESULT, NUMERATOR, DENOMINATOR) :-
DENOMINATOR is NUMERATOR // RESULT.
我可以让第一条规则起作用:
| ?- equation(RESULT, 200, 10).
RESULT = 20 ?
yes
但是随后尝试将“洞”从“结果”插槽移动到其他两个插槽中的任何一个似乎都不符合其他规则:
| ?- equation(20, N, 10).
uncaught exception: error(instantiation_error,(is)/2)
| ?- equation(20, 200, D).
uncaught exception: error(instantiation_error,(is)/2)
我是序言的新手,所以可能会以错误的方式处理这个问题......关于我如何编程的任何指针?
版本信息如下:
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?-