Я пытаюсь написать метод python, который при открытии пролога имеет несколько решений. Я думал, что могу использовать registerForeign
, но примеры проекта не указывают, можно ли это сделать. Вот надуманный пример того, что я хочу сделать:
Представьте себе предикат active_user(X)
, который объединяет X для каждого активного пользователя на веб-сайте. Затем в моем прологе я мог бы дополнительно отфильтровать X по другим предикатам, например active_user(X), max_level(X)
Определение python для active_user
могло бы выглядеть так:
def active_users(username):
active_users = server.get_active_users() # List of strs
for a in active_users:
username.unify(a)
yield
Выше, конечно , не работает. Вот еще один подход, который я пробовал:
def active_users(username):
username = list(server.get_active_users())
Это тоже не сработало. Однако приведенный ниже пример работает:
def active_users(username):
username.unify("george")
Каталог примеров содержит простое использование registerForeign
, но не обрабатывает этот случай. Единственное рабочее решение, которое я придумал, - это сделать запрос заранее, а затем подтвердить эти значения, используя prolog.assertz
в al oop. Но это менее гибко, чем то, что я себе представляю.
Спасибо
РЕДАКТИРОВАТЬ: "george" не работает, потому что это строка (возможно, отдельный вопрос), но объединяет целое число в этом случае работает.