我是新手的友善协助。亨特,劳拉,吉姆,莎莉和杰克在同一座建筑物中工作,并设有五个相邻的办公室。亨特在第五办公室不工作,劳拉在第一台办公室工作。吉姆在第一任或最后一个办公室工作,他不在杰克或劳拉附近的办公室里。莎莉(Sally)在某个办公室工作,高于劳拉(Laura)。谁在哪个办公室工作?
编写一个序幕程序来解决此问题。定义邻接是什么,然后是办公室是什么,然后创建一个布局(x),使您可以列入所有规则。每个人都被任命为没有打破任何规则的办公室。
在此答案中,我们使用clpfd。阅读有关CLPFD的教程以获取详细信息!
: - use_module(库(clpfd))。拼图(P): - puzzzle_vars(p,zs), 标签([],ZS)。Puzzzle_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_diverent(zs), 猎人# = 5, 劳拉# = 1, 吉姆# = 1, 吉姆# = 5, ABS(Jim-Jack)# = 1, ABS(Jim-Laura)# = 1, 莎莉#>劳拉。
谁在哪个办公室工作?让我们问prolog!
?- puzzle(P).
P = [hunter-3, jack-1, jim-4, laura-2, sally-5]
; false.