我刚刚开始使用 core.logic,为了解决这个问题,我正在尝试实现一些简单的东西,类似于我目前正在专业处理的问题。然而,问题的一部分让我难住了......
作为我的示例的简化,如果我有一个项目目录,其中一些仅在某些国家/地区可用,而有些在特定国家/地区不可用。我希望能够指定项目列表和例外情况,例如:
(defrel items Name Color)
(defrel restricted-to Country Name)
(defrel not-allowed-in Country Name)
(facts items [['Purse 'Blue]
['Car 'Red]
['Banana 'Yellow]])
(facts restricted-to [['US 'Car]])
(facts not-allowed-in [['UK 'Banana]
['France 'Purse]])
如果可能的话,我宁愿不为所有国家/地区指定允许进入,因为有限制的项目集相对较小,我希望能够进行一次更改以允许/排除给定项目的项目国家。
如何编写一个规则,给出一个国家/地区的项目/颜色列表,并具有以下约束:
- 该项目必须在项目列表中
- 国家/项目不得在“不允许进入”列表中
- 任何一个:
- 该项目的限制列表中没有国家
- 国家/项目对在限制列表中
有没有办法做到这一点?我是否以完全错误的方式思考事情?