【发布时间】:2013-05-16 21:26:39
【问题描述】:
我正在尝试建模一个简单的 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
但随后尝试将“洞”从“RESULT”插槽移动到其他两个插槽中的任何一个似乎都不符合其他规则:
| ?- equation(20, N, 10).
uncaught exception: error(instantiation_error,(is)/2)
| ?- equation(20, 200, D).
uncaught exception: error(instantiation_error,(is)/2)
我是 prolog 的新手,所以可能会以错误的方式处理这个问题......关于我如何编程的任何指针?
版本信息如下:
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?-
【问题讨论】:
-
为什么要使用整数除法(即//)?
-
其实:对于我要解决的问题 - 我知道输入是整数(实际上是这样尝试的:newscientist.com/article/mg21829171.400-enigma-number-1749.html)
标签: prolog