编写Prolog程序来解决此问题

时间:2019-03-13 10:24:43

标签: prolog zebra-puzzle

我是Prolog的新手,请帮忙。 亨特(Hunter),劳拉(Laura),吉姆(Jim),莎莉(Sally)和杰克(Jack)在同一栋大楼中工作,并设有五个相邻的办公室。亨特不在第5个办公室工作,劳拉不在第一个办公室工作。吉姆不在第一个或最后一个办公室里工作,而且他不在杰克或劳拉附近的办公室里。 Sally在比Laura更高的办公室里工作。谁在哪些办公室工作?

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

1 个答案:

答案 0 :(得分:0)

在此答案中,我们使用。阅读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.