【发布时间】:2013-06-07 16:04:28
【问题描述】:
假设我有一个变量V,V 的值可以是0..5 范围内的任何数字。但是,某些值比其他值更受欢迎,因此它将V 的域指定为有序序列。
我可以在 SICStus Prolog 中执行此操作吗?
示例:
% PSEUDOCODE
%
% 3 is more preferred than 4; 4 is more preferred than 2; and so on..
% So I would write something like this:
V in {3,4,2,5,1,0},
getDomainAsList(V, List), % the predicate do not exist
% and the List would be: [3,4,2,5,1,0] and not [1,2,3,4,5]
我阅读了手册,但没有找到任何有用的信息。我可以通过自定义标签来解决这个问题(即将 V 的域转换为列表,对其进行排序并将值分配给V),但我预计性能会更差。
【问题讨论】:
-
您可能错过了标签“clpfd”。如果没有,请告诉我如何声明变量。
-
我知道 Prolog 中的列表是如何工作的。我有自己的 CLPFD 变量标签,我执行以下操作:1) 取一个变量 X 2) 找出它的域 3) 为 X 分配一个值。显然,分配第一个值会快得多(示例中的 3)而不是取 V 的域并对其进行排序。
标签: prolog clpfd sicstus-prolog