写一个Prolog程序来解决这个问题
Write a Prolog program to solve this problem
我是Prolog的新手,请多多指教。
亨特、劳拉、吉姆、莎莉和杰克在同一栋大楼工作,办公室有五个相邻的办公室。亨特不在第五办公室工作,劳拉也不在第一办公室工作。吉姆不在第一个或最后一个办公室工作,他也不在与杰克或劳拉相邻的办公室。 Sally 在比 Laura 更高的办公室工作。谁在什么办公室工作?
写一个Prolog程序来解决这个问题。定义邻接是什么,办公室是什么,然后创建一个允许您放入所有规则的布局 (X)。
每个人都被安置在一个不违反任何给定规则的办公室。
在此答案中,我们使用 clpfd. 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.
我是Prolog的新手,请多多指教。 亨特、劳拉、吉姆、莎莉和杰克在同一栋大楼工作,办公室有五个相邻的办公室。亨特不在第五办公室工作,劳拉也不在第一办公室工作。吉姆不在第一个或最后一个办公室工作,他也不在与杰克或劳拉相邻的办公室。 Sally 在比 Laura 更高的办公室工作。谁在什么办公室工作?
写一个Prolog程序来解决这个问题。定义邻接是什么,办公室是什么,然后创建一个允许您放入所有规则的布局 (X)。 每个人都被安置在一个不违反任何给定规则的办公室。
在此答案中,我们使用 clpfd. 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.