我是 Prolog 的新手,请协助。Hunter、Laura、Jim、Sally 和 Jack 在与五个相邻办公室的同一栋大楼内工作。亨特不在第五办公室工作,劳拉不在第一办公室工作。Jim 不在第一个或最后一个办公室工作,而且他不在 Jack 或 Laura 旁边的办公室。莎莉在比劳拉更高的办公室工作。谁在什么办公室工作?
编写一个 Prolog 程序来解决这个问题。定义什么是邻接,然后是什么办公室,然后创建一个布局(X),允许您放入所有规则。每个人都被安置在一个不违反任何规定的办公室里。
我是 Prolog 的新手,请协助。Hunter、Laura、Jim、Sally 和 Jack 在与五个相邻办公室的同一栋大楼内工作。亨特不在第五办公室工作,劳拉不在第一办公室工作。Jim 不在第一个或最后一个办公室工作,而且他不在 Jack 或 Laura 旁边的办公室。莎莉在比劳拉更高的办公室工作。谁在什么办公室工作?
编写一个 Prolog 程序来解决这个问题。定义什么是邻接,然后是什么办公室,然后创建一个布局(X),允许您放入所有规则。每个人都被安置在一个不违反任何规定的办公室里。
在这个答案中,我们使用clpfd。阅读关于 clpfd 的教程以获取详细信息!
:- 使用模块(库(clpfd))。 拼图(P):- 拼图变量(P,Zs), 标签([],Zs)。 拼图变量(P,Zs):- P = [猎人-猎人,杰克-杰克,吉姆-吉姆, 劳拉-劳拉,莎莉-莎莉], Zs = [猎人,劳拉,吉姆,莎莉,杰克], Zs ins 1..5, all_different(Zs), 猎人#\= 5, 劳拉 #\= 1, 吉姆 #\= 1, 吉姆 #\= 5, 绝对(吉姆-杰克)#\= 1, 绝对(吉姆-劳拉)#\= 1, 莎莉#>劳拉。
谁在什么办公室工作?让我们问Prolog!
?- puzzle(P).
P = [hunter-3, jack-1, jim-4, laura-2, sally-5]
; false.