Вероятно, вам нужна функция Prolog, которая утверждает / убирает динамический предикат, такой как myListVars / 1 , который не делает ничего, кроме сохранения указанного списка значений, которые вы можете впоследствии извлечь.
Например, если у вас есть три переменные X,Y,Z
, которые вы хотите запомнить, они могут быть сохранены в динамический факт myListXYZ / 1 с таким предикатом, как этот:
setListXYZ(_,_,_) :-
retract(myListXYZ(_)),
fail.
setListXYZ(X,Y,Z) :-
assert(myListXYZ([X,Y,Z])).
и извлекается с помощью предиката, подобного этому:
getListXYZ(X,Y,Z) :-
myListXYZ([X,Y,Z]).
Этот подход предполагает, что вы будете иметь (самое большее) один факт за один раз для myListXYZ / 1 , что гарантируется, если доступ осуществляется только с помощью предиката через пару get / set выше.
Я часто использую подобные предикаты «факта» для хранения тестовых случаев для программ Prolog, где неудобно вводить требуемые аргументы вручную. Можно добавить несколько тестовых наборов, добавив дополнительный аргумент, который «помечает» тестовые наборы.