表格模式和B-Prolog中的回溯

时间:2013-01-30 23:14:23

标签: prolog b-prolog

考虑该计划:

:- table cost(+, min).
cost(1, 0).
cost(1, 1).
cost(2, 1).

我预计cost(I, C).的结果是I = 1,C = 0; I = 2,C = 1 - 所有可能的输入参数以及相应的最小结果。

但我只得到一个:

cost(I, C).
I = 1
C = 0 ?;
no

但如果我明确指出输入参数的所有可能性,我得到我想要的东西:

( I = 1 ; I = 2 ), cost(I, C).
I = 1
C = 0 ?;
I = 2
C = 1 ?;
no

是否可以在不明确枚举所有可能输入的情况下获得具有相应最小结果的输入参数的所有组合?

2 个答案:

答案 0 :(得分:2)

具有优化模式(min或max)的表声明指示系统为每个输入参数组合提供一个答案。您可以给出基数限制,以指示系统存储多个最佳答案。例如,您可以提供如下声明:

:- table cost(+, min):3.

然后,系统将为每个输入提供最多3个最佳答案,按最佳性排序。如果没有明确给出,则假定限制为1.

系统不存储所有答案。这很重要,因为对于动态编程问题,您只需要记住子问题的当前最佳答案。

周能发

答案 1 :(得分:1)

前段时间我在B-Prolog手册中找到了答案:“请注意,如果表模式不受尊重,或者如果没有限制优化参数,一个程序可能会给出意想不到的答案“。

问题中的代码不尊重“表格成本(+,min)”。模式并尝试使用first cost / 2参数作为输出。