【发布时间】:2018-12-02 10:25:49
【问题描述】:
spec(comp1, pc, 32). /* Fact 1 */
spec(comp2, mac, 128). /* Fact 2 */
spec(comp3, pc, 64). /* Fact 3 */
runs(pc, movie_edit, 96). /* Fact 4 */
runs(pc, vb, 16). /* Fact 5 */
runs(pc, cpp, 28). /* Fact 6 */
runs(mac, vb, 24). /* Fact 7 */
runs(mac, prolog, 128). /* Fact 8 */
access(judy, comp1). /* Fact 9 */
access(peter, comp3). /* Fact 10 */
access(david, comp1). /* Fact 11 */
access(david, comp2). /* Fact 12 */
can_use(P, SW) :- access(P, Comp), can_run(Comp, SW). /* Rule 1 */
can_run(Comp, SW) :- spec(Comp, CompType, MemAvail),
runs(CompType, SW, MemNeeded),
MemAvail >= MemNeeded. /* Rule 2 */
?- can_use(judy, vb).
?- can_use(david, prolog).
第一个目标返回:真,假。
而第二个只返回 true。
我的问题是为什么在第一个目标中我们有额外的信息。
我使用的是 SWI-Prolog 7.6.4 版本
【问题讨论】:
-
这里你的两个目标是一样的,所以我希望两个都返回
true; false.? -
非常抱歉,这是一个错误,我已更正。
-
david的查询不回溯的原因是因为这里每次都选择last 个事实,因此没有机会进一步回溯。跨度>