我正在尝试使用 SWI prolog 和 CLP 进行项目调度。我设法支持顺序依赖,但我正在努力避免重复预订人。
我有一个名为 Schedule 的列表,其中包含 [taskname, starttime] 等元素,其中 starttime 是约束求解器的自由变量。它们已经受到顺序依赖的约束。
我正在尝试编写这样的循环来排除重复预订:
forall /* or maybe foreach*/ (isa(P,person), (
% Filter scheduled tasks on that person...
include(\[T,S]^(assigned(T,P)), Schedule, HisSchedule),
% Present what serialized expects..
maplist(\[T,S]^S^true, HisSchedule, Sts),
% duration is just user-defined data...
maplist(\[T,S]^D^(duration(T,D)), HisSchedule, Dus),
% Hit it...
serialized(Sts, Dus)
)),
使用 foreach 总是失败,使用 forall 总是成功,没有任何限制。
就这个循环而言,Schedule 是全局的,目的是使用序列化来约束它的 starttime 元素。OTOH、HisSchedule、Sts 和 Dus 取决于特定的人。所以我认为我需要 foreach 来让 Schedule 开心,但为了让 HisSchedule 等开心。那是问题吗?如果是这样,我该如何解决?