首页 > 解决方案 > 为什么它说我的谓词 block/3 没有被调用?

问题描述

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

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

谓词未调用

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

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

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

我编写程序只是为了解决行,而不考虑图像的方向和两侧。如果给出的答案不止一个,它不应该给出太多手动尝试的答案。

无论如何,不​​知何故solve(X)完全忽略了我的谓词block/3。我已经盯着它看了很长时间,我找不到问题。

标签: prolog

解决方案


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

相当于

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

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


推荐阅读