小编Vik*_*kat的帖子

在prolog中排除tuples_in列表

这就是问题所在:16个孩子将坐在一个4 x 4的椅子上.孩子是8个女孩(编号为1..8)和8个男孩(编号为9..16).1,3,5,8认为男孩是令人讨厌的9,10,11,14认为女孩是粗暴这些对是敌人:[[1,2],[4,6],[4,7],[4,9 ],[9,11],[12,14],[14,16]]

找到两个孩子不是敌人的谓词定义为:

not_enemy(A, B) :-
    NotA #\= A #\/ NotB #\= B,
    tuples_in([[NotA, NotB]],
              [[1,2], [4,6], [4,7], [4, 9],[9,11], [12, 14], [14,16]]).
Run Code Online (Sandbox Code Playgroud)

上面的代码在这里找到

但是当我查询? - not_enemy(1,2)时输出为真.

我必须使用这个长代码:

not_enemy(A, B) :-
          A #=1 #==> B #\= 2,
          A #=4 #==> B #\= 6,
          A #=4 #==> B #\= 7,
          A #=4 #==> B #\= 9,
          A #=9 #==> B #\= 11,
          A #=12 #==> B #\= 14,
          A #=14 #==> B #\= 16.
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙纠正第一段代码吗?提前致谢.

prolog clpfd

5
推荐指数
2
解决办法
300
查看次数

标签 统计

clpfd ×1

prolog ×1