我正在尝试编写一个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).
这不起作用,因为#=仅适用于算术表达式作为操作数。有什么方法可以实现这样的目标?
答案 0 :(得分:0)
不是解决方案,而是一些不适合评论的观察。
不要使用列表来表示关系。例如,代替[f1, s1]
,写下requires(f1, s1)
。如果修复了这些要求,则将requires/2
定义为谓词。如果您需要识别或枚举功能,请考虑feature/1
谓词。例如:
feature(f1).
feature(f2).
...
相同的s1
,s2
,......例如
support(s1).
support(s2).
...