prolog - 为什么它说我的谓词 block/3 没有被调用?
问题描述
所以我一直在学习 Prolog,为了测试自己,我想解决一个难题。我想我很接近解决它,但我似乎做错了什么。看来我的谓词block/3
没有被调用。
也许这是一个语法错误,或者我正在做一些在 Prolog 中不起作用的事情。我看不到它。
block/3
应该给出集合中所有可能的组合block/2
。
我不确定它是否完全相关,但我将包括拼图的目标:
有四个立方体,它们的脸上有四个图像的不同组合。(Kim、Lab、Hail 和 Com)
我们的目标是将立方体对齐,这样如果你把它们放在一起,所有相邻的边都应该是相同的。所以每个立方体周围有四行相同的行,然后两侧也应该匹配。
我编写程序只是为了解决行,而不考虑图像的方向和两侧。如果给出的答案不止一个,它不应该给出太多手动尝试的答案。
无论如何,不知何故solve(X)
完全忽略了我的谓词block/3
。我已经盯着它看了很长时间,我找不到问题。
解决方案
member( block(1, _, Row), X )
相当于
E = block(1, _, Row), member( E, X )
所以它实际上并没有block/3
作为谓词调用,它只是象征性地将其用作复合术语。
推荐阅读
- r - 结合来自 dplyr 的“mutate”和“across”以及来自 stringr 的函数
- r - 在 Rmarkdown 中显示长表
- swift - Self 类型的存储变量(尤其是子类化时)
- wpf - 使用 Prism 7 的 WPF 应用程序:如何使用具有多个具体类的接口为 VM 注册和导航
- java - 协助确定算法的执行时间
- r - 我正在尝试制作一个简单的数据框,而我正在使用的代码并没有给我我所期望的
- r - 将列名传递给函数
- c++ - NtCreateThreadEx 在 Windows 10 64 位 1909 上不起作用
- python - 在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证
- javascript - Javascript 问题:如何选择所有具有相同类名的 div 并附加一个事件?