我正在尝试为学校分配Prolog,基本上是在试图找出谁担任办公室。问题是:
亨特(Hunter),劳拉(Laura),吉姆(Jim),莎莉(Sally)和杰克(Jack)在同一座建筑物中工作,并设有五个相邻的办公室。亨特不在第5个办公室工作,劳拉不在第一个办公室工作。吉姆不在第一个或最后一个办公室里工作,并且他不在杰克或劳拉附近的办公室里。 Sally在比Laura更高的办公室里工作。谁在哪些办公室工作?
下面是我的代码,但是我收到了:
uncaught exception: error(type_error(fd_evaluable,abs/1),(#\=)/2)
这是代码。
puzzle(P) :-
findWhosOffice(P,Z),
labeling([],Z).
findWhosOffice(P, Z) :-
P = [hunter-Hunter, jack-Jack, jim-Jim, laura,Laura,sally,Sally],
Z = [Hunter, Laura, Jim, Sally, Jack],
Hunter #\= 5,
Laura #\= 1,
Jim #\= 1,
Jim #\= 5,
abs(Jim-Jack) #\=1,
abs(Jim-Laura) #\=1,
Sally #> Laura.
答案 0 :(得分:0)
问题是您尚未在var win = new Ext.Window({
title: "popup",
// rest of the code
}).show();
btn.addEventListener("click", () => {
win.close()
})
中定义变量的域。要使之成为有效且独特的解决方案,还缺少一个约束条件。
答案 1 :(得分:0)
这是我的解决方案,我发现您尚未使用all_different():
:-use_module(library(clpfd)).
puzzle(Employee,Employee_Office_Room):-
Employee=[Hunter, Laura, Jim, Sally, Jack], Employee ins 1..5,
Employee_Office_Room=[First,_Second,_Third,_Fourth,Fifth], Employee_Office_Room ins 1..5,
all_different(Employee),
all_different(Employee_Office_Room),
Hunter#\=Fifth,
Laura#\=First,
Jim#\=First,
Jim#\=Fifth,
not_nextto(Jim,Laura),
not_nextto(Jim,Jack),
Sally#=Laura-1,
labeling([],Employee),labeling([],Employee_Office_Room).
not_nextto(A,B):-abs(A-B)#\=1.
?-puzzle(Employee,Employee_Office_Room).
Employee = [1, 4, 2, 3, 5],
Employee_Office_Room = [1, 2, 3, 4, 5]
Employee = [1, 4, 2, 3, 5],
Employee_Office_Room = [1, 2, 3, 5, 4]
Employee = [1, 4, 2, 3, 5],
Employee_Office_Room = [1, 2, 4, 3, 5]
Employee = [1, 4, 2, 3, 5],
Employee_Office_Room = [1, 2, 4, 5, 3]
Employee = [1, 4, 2, 3, 5],
Employee_Office_Room = [1, 2, 5, 3, 4]....