2015-03-25 2 views
1

Я использую swi-пролог в моей программе python. Он принимает входной запрос от пользователя и создает для него утверждения. Я сохранил эту роль как рабочий-редуктор (например, серверный сокет), который продолжает прослушивать входной запрос.Промывка утверждений (фактов) после каждого исполнения

  1. первый запрос - программа генерирует число х утверждает

  2. 2-й запрос - программа генерирует Y числа утверждает, теперь программа считает (х + у) утверждает, при обработке запроса.

и так далее.

Это какой-либо способ смывать утверждения после каждого выполнения запроса? Вот фрагмент кода process.pro:

Здесь ссылка принимает заявки и вопрос для ввода запроса.

question(REND, RULE):- 
    linkage(LINK, LEND, REND_NEW), 
    ( 
     (
      rule_first_question(LINK, REND_NEW) -> 
       nb_getval(rule, RULE_NEW), 
       nb_getval(rend, REND) 
       ; nb_linkval(rule, ''), nb_getval(rule, RULE) 
     ) 
     ; 
     (
      rule_third_question(LINK, REND_NEW) -> 
       nb_getval(link, LINK_NEW), 
       nb_getval(rule, RULE_NEW) 
       ; nb_linkval(rule, ''), nb_getval(rule, RULE) 
     ) 
     ; 
     (
      rule_four_question(LINK, REND_NEW) -> 
       nb_getval(link, LINK_NEW), 
       nb_getval(rule, RULE_NEW) 
       ; nb_linkval(rule, ''), nb_getval(rule, RULE) 
     ) 
    ). 
+2

Последняя точка с запятой кажется недействительным синтаксисом для меня – CapelliC

+0

@CapelliC: да, забыл удалить при копировании фрагмента кода. – nlper

+2

Использование 'nb_getval/2' и' nb_linkval' для ваших целей не имеет смысла. Эти конструкции редко используются, вы не узнаете ничего о Prolog, начав с них. – false

ответ

1

Да, ретракт может помочь вам удалить факты из базы данных.

for p in self.prolog_question_identify.query("retract(linkage(_,_,_)),fail"): 
    print 

В ссылке вы можете указать, какую ценность когда-либо нужно вымыть.

0

Я предполагаю, что «флеш» означает «забыть».

retractall/1 - это то, что вы желаете.

Пример:

- утверждают (bottoms_on_fire (all_english_men)).

true.

? - assert (bottomoms_on_fire (all_scottish_men)).

true.

? - bottomoms_on_fire (all_english_men).

true.

? - retractall (Bottoms_on_fire (_)).

true.

% Примечание- использование анонимной переменной для объединения со всеми такими фактами

- bottoms_on_fire (all_english_men).

Неверный.

Смежные вопросы