singleShiftDataGen([Name1,Name2,Name3,Name4],Shifts,
PersonData1,PersonData2,PersonData3,PersonData4):-
find(Name1, Shifts, PersonData1),
find(Name2, Shifts, PersonData2),
find(Name3, Shifts, PersonData3),
find(Name4, Shifts, PersonData4).
%checkSingleShiftReport(PersonData1,PersonData2, PersonData3,PersonData4).
% This method will take in one single.
find(Item, [[Item|T1]|T2], T1).
find(Item, [[_|_]|T], List):-
find(Item, T, List1),
append([], List1, List).
输入: -
singleShiftDataGen([young, collins, vieira, liu], [
[aziz, 1, 0, 0],
[blumenthal, 0, 1, 1],
[collins, 1, 1, 1],
[davis, 1, 0, 0],
[ericson, 1, 0, 0],
[fitzgerald, 1, 0, 1],
[gutierrez, 1, 0, 1],
[hughes, 1, 0, 0],
[jones, 1, 1, 1],
[kelly, 0, 1, 1],
[liu, 1, 0, 1],
[martinez, 0, 1, 1],
[patel, 1, 1, 1],
[qureshi, 1, 1, 0],
[rodriguez, 1, 0, 0],
[singh, 0, 1, 1],
[tortorella, 0, 0, 1],
[williams, 1, 0, 0],
[vieira, 0, 1, 0],
[young, 0, 1, 0],
[zimmerman, 1, 1, 1]], Person1, Person2, Person3, Person4).
实际输出: -
Person1:- Person3
Person2:- [1, 1, 1]
Person3:- [0, 1, 0]
Person4:- [1, 0, 1]
预期产出: -
Person1:- [0, 1, 0]
Person2:- [1, 1, 1]
Person3:- [0, 1, 0]
Person4:- [1, 0, 1]
正如您所看到的,我得到的输出是Person1 = Person3而不是列表中的实际整数。有没有办法解决这个问题?因为我的整个家庭作业不会起作用。
答案 0 :(得分:2)
实际上,您的代码正常运行。 Person1 = Person3
它只是SWI-Prolog控制台界面的一个功能(所谓的顶级)。我认为启发行为的UX选择是在报告的变量等于复杂值时更容易检测。
修改的
似乎无法禁用该功能,但您可以使用$ VARIABLE语法(仅在顶层中可用)检查变量(在成功查询后):
?- write($Person1).
[0,1,0]
Person1 = [0, 1, 0].