我是Prolog的新手,请帮忙。 亨特(Hunter),劳拉(Laura),吉姆(Jim),莎莉(Sally)和杰克(Jack)在同一栋大楼中工作,并设有五个相邻的办公室。亨特不在第5个办公室工作,劳拉不在第一个办公室工作。吉姆不在第一个或最后一个办公室里工作,而且他不在杰克或劳拉附近的办公室里。 Sally在比Laura更高的办公室里工作。谁在哪些办公室工作?
编写一个Prolog程序来解决此问题。定义什么是邻接关系,然后是什么办公室,然后创建允许您放入所有规则的layout(X)。 每个人都会被安置在不违反任何规定的办公室中。
答案 0 :(得分:0)
在此答案中,我们使用clpfd。阅读tutorial on clpfd了解详情!
:- use_module(library(clpfd)). puzzle(P) :- puzzle_vars(P, Zs), labeling([], Zs). puzzle_vars(P, Zs) :- P = [hunter-Hunter, jack-Jack, jim-Jim, laura-Laura, sally-Sally], Zs = [Hunter,Laura,Jim,Sally,Jack], Zs ins 1..5, all_different(Zs), Hunter #\= 5, Laura #\= 1, Jim #\= 1, Jim #\= 5, abs(Jim-Jack) #\= 1, abs(Jim-Laura) #\= 1, Sally #> Laura.
谁在哪些办公室工作?让我们问一下Prolog!
?- puzzle(P).
P = [hunter-3, jack-1, jim-4, laura-2, sally-5]
; false.