如何使用成员谓词在prolog中指定约束

时间:2016-07-20 10:50:54

标签: prolog clpfd constraint-programming

我正在尝试编写一个Prolog程序,它执行以下操作: 我在“关系”列表中定义了一些关系。 (例如:[f1,s1]表示f1需要s1)根据TargetFeat列表中选择的特征(f1,f2,f3),我想使用约束编程创建结果列表。 以下是示例代码:

Relations =[[f1, s1], [f2, s2], [f3, s3], [f3, s4]],
TargetFeat = [f3, f1],
Result = [],
member(f3,TargetFeat) #= member(s3,Result), %One of the constraints
labeling(Result).

这不起作用,因为#=仅适用于算术表达式作为操作数。有什么方法可以实现这样的目标?

1 个答案:

答案 0 :(得分:0)

不是解决方案,而是一些不适合评论的观察。

不要使用列表来表示关系。例如,代替[f1, s1],写下requires(f1, s1)。如果修复了这些要求,则将requires/2定义为谓词。如果您需要识别或枚举功能,请考虑feature/1谓词。例如:

feature(f1).
feature(f2).
...

相同的s1s2,......例如

support(s1).
support(s2).
...