Передать список (list) из Python в Prolog PySwip
Я пишу программу использую Prolog и Python, используя библиотеку PySwip. Мне необходимо передать список из Python в Prolog. На данный момент я сделал это так:
from pyswip import Prolog
p = Prolog()
p.assertz("fruits([apple,banana,orange])") # Создание списка
p.assertz("result(X) :- fruits(L), member(X, L)") # Правило вхождения элемента в список
print(list(p.query("result(orange)."))) # Возвращает True, если такой элемент есть в списке
Но мне необходимо сделать список отдельным объектом, потому что мне необходимо совершить с ним определенные действия, то того как отправить в пролог. Я не знаю как это реализовать.
from pyswip import Prolog
p = Prolog()
fruits = [apple,banana,orange]
p.assertz("Как передать в Prolog список fruits???") # Я не знаю как это реализовать.
Подскажите, как это можно сделать? Всем заранее спасибо за помощь.
Ответы (1 шт):
Автор решения: CameL
→ Ссылка
В итоге решение найдено. Опубликую его, вдруг кому - нибудь поможет. Необходимо просто передавать список в запрос в виде строки, f-строки с этим справляются лучше всего. Также на данном примере проверено, что это работает и с русскими символами.
from pyswip import Prolog
p = Prolog()
fruits = ['слива', 'груша']
p.assertz(f"фрукты({fruits})") # Задаем список
p.assertz("result(X) :- фрукты(L), member(X, L)") # Задаем правило для проверки вхождения в список
print(list(p.query("result('слива')."))) # Выполняем запрос, если список не пустой, значит true