【问题标题】:Why does it say my predicate block/3 is not called?为什么它说我的谓词 block/3 没有被调用?
【发布时间】:2020-01-19 14:01:53
【问题描述】:

所以我一直在学习 Prolog,为了测试自己,我想解决一个难题。我想我很接近解决它,但我似乎做错了什么。看来我的谓词 block/3 没有被调用。

也许这是一个语法错误,或者我正在做一些在 Prolog 中不起作用的事情。我看不到。

block/3 应该给出block/2 中所有可能的集合组合。

我不确定它是否完全相关,但我会包括拼图的目标:

有四个立方体,它们的脸上有四个图像的不同组合。 (Kim、Lab、Hail 和 Com)
目标是将立方体对齐,如果将它们放在一起,则彼此相邻的所有边都应该相同。所以每个立方体周围有四行相同的行,然后两侧也应该匹配。

我编写的程序只是解决行,而忽略图像的方向和两侧。如果给出的答案不止一个,那么手动尝试的答案也不应该太多。

无论如何,不​​知何故solve(X) 完全忽略了我的谓词block/3。看了很久,没找到问题。

【问题讨论】:

    标签: prolog


    【解决方案1】:
     member( block(1, _, Row), X )
    

    等价于

     E = block(1, _, Row), member( E, X )
    

    所以它实际上并没有将block/3 称为谓词,它只是象征性地将其用作复合词。

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2022-10-15
      • 2019-01-28
      相关资源
      最近更新 更多