【问题标题】:Prolog, Printing variable instead of actual answer, works for different answer but not for duplicatesProlog,打印变量而不是实际答案,适用于不同的答案,但不适用于重复
【发布时间】:2017-04-03 23:57:17
【问题描述】:
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,而不是列表中的实际整数。有没有办法解决这个问题?因为那样我的整个家庭作业都不会奏效。

【问题讨论】:

  • append([], List1, List).List1 = List 相同
  • 那么,我该怎么办,将 List1 中的任何内容复制到 List 中,而不是附加它?

标签: list prolog prolog-toplevel


【解决方案1】:

实际上,您的代码正在运行。 Person1 = Person3 这只是 SWI-Prolog 控制台界面(所谓的顶层)的一个功能。我想激发行为的 UX 选择是为了更容易检测报告的变量何时等于 complex 值。

编辑

似乎无法禁用该功能,但您可以在成功查询后检查变量 - 使用 $VARIABLE 语法(仅在顶层可用):

?- write($Person1).
[0,1,0]
Person1 = [0, 1, 0].

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2019-02-15
  • 2023-01-29
  • 2021-07-17
相关资源
最近更新 更多