Я только начал играть с 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]])
Если возможно, я бы предпочел не указывать допустимый вход для всех стран, так как набор элементов с ограничениями относительно невелик, и я хотел бы иметь возможность сделать одно изменение для разрешения/исключения для элемента для данной страны.
Как я могу написать правило, которое дает список элементов/цветов для страны со следующими ограничениями:
- Элемент должен находиться в списке элементов
- Страна/элемент не должны находиться в списке "не разрешенных"
- Либо:
- В ограниченном списке для этого элемента нет страны
- Пара стран/товаров находится в ограниченном списке
Есть ли способ сделать это? Я думаю о вещах совершенно не так?