私は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]])
可能であれば、制限のあるアイテムのセットは比較的小さいため、すべての国で許可されていることを指定したくありません。また、特定のアイテムの許可/除外を 1 つの変更で行えるようにしたいと考えています。国。
次の制約を使用して、国のアイテム/色のリストを提供するルールを作成するにはどうすればよいですか:
- アイテムはアイテムのリストにある必要があります
- 国/アイテムは「許可されていない」リストに含まれていてはなりません
- また:
- そのアイテムの制限対象リストに国がありません
- 国/アイテムのペアは制限リストに含まれています
これを行う方法はありますか?私は物事を完全に間違った方法で考えていますか?