【问题标题】:Prolog office puzzleProlog 办公室拼图
【发布时间】:2020-03-23 16:33:56
【问题描述】:

我正在尝试为学校做 Prolog 作业,基本上是在尝试找出谁在哪个办公室。问题是:

Hunter、Laura、Jim、Sally 和 Jack 在同一栋大楼内工作,有五个相邻的办公室。亨特不在第五办公室工作,劳拉不在第一办公室工作。 Jim 不在第一个或最后一个办公室工作,而且他不在 Jack 或 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.

【问题讨论】:

    标签: prolog typeerror clpfd zebra-puzzle


    【解决方案1】:

    问题是您没有为Z 中的变量定义域。还缺少一个约束以使其成为有效且唯一的解决方案。

    【讨论】:

      【解决方案2】:

      这是我的解决方案,我看到你没有使用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]....
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        相关资源
        最近更新 更多