Сохранение переменных Пролог - PullRequest
2 голосов
/ 06 марта 2011

Можно ли сохранить переменные в прологе?

Я хотел бы сохранить и отредактировать список во время работы программы, но не могу найти сохранения списка между изменениями.

1 Ответ

5 голосов
/ 06 марта 2011

Вероятно, вам нужна функция 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, где неудобно вводить требуемые аргументы вручную. Можно добавить несколько тестовых наборов, добавив дополнительный аргумент, который «помечает» тестовые наборы.

...