写一个Prolog程序来解决这个问题

Write a Prolog program to solve this problem

我是Prolog的新手,请多多指教。 亨特、劳拉、吉姆、莎莉和杰克在同一栋大楼工作,办公室有五个相邻的办公室。亨特不在第五办公室工作,劳拉也不在第一办公室工作。吉姆不在第一个或最后一个办公室工作,他也不在与杰克或劳拉相邻的办公室。 Sally 在比 Laura 更高的办公室工作。谁在什么办公室工作?

写一个Prolog程序来解决这个问题。定义邻接是什么,办公室是什么,然后创建一个允许您放入所有规则的布局 (X)。 每个人都被安置在一个不违反任何给定规则的办公室。

在此答案中,我们使用 . Read a 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.