Описание тега prolog-assert

Prolog-assert глобально влияет на хранимую информацию в Prolog, языке логического программирования общего назначения.
2 ответа

Как вы можете добавлять элементы в список или вычислять их из базы знаний, не используя findall или assert/retract в Prolog?

У меня есть база знаний, которая состоит из базы данных студентов в файле 'Students.pl', как это: % student(Name,Percent,List_of_Marks_in_3_subjects). student('abc',83,[80,80,90]). student('pqr',70,[70,60,80]). student('xyz',76,[80,70,80]). Я хочу п…
1 ответ

Как ввести все результаты этого правила как факты в программу или как я могу обработать эти результаты как факты?

%Examples %course_meetings(maths4,tutorial,t07,khaled_mohamed,'tutorial for t07') %days([sat,sun...]) %tutorialrooms([c6301,b4108,c2201,c2301,c2202,c2203]) %slots([1,2,3,4,5]) day_tut(Day,Slot,Place,Course,Group,Instr,Descr):- days(X),member(Day,X),…
17 апр '12 в 13:30
2 ответа

Динамический предикат Пролог с инкрементным компонентом

У меня есть база знаний, состоящая из набора правил, глава каждого из которых выполняет утверждение или удаление сложных терминов при возникновении определенных условий. Как я могу гарантировать, что Id увеличивается с каждым assert(term(Id,A,B,C))?
0 ответов

Как обновить значение в предикате в прологе

Я борюсь с обновлением значения предиката, проверяя, является ли результат предиката пустым. next(X,Y) :- Y='to' -> checker(X). checker(X) :- list(X) = true -> retract(list(X)), assert(list(X)) ; assert(list(X)). За next(X,Y), это перейдет в c…
13 ноя '17 в 05:38
0 ответов

Вызов процедуры во время assert в Прологе

У меня есть запрос assert, что-то вроде: :- dynamic a/1,b/1. dump:- listing(a),listing(b). main:-retractall(a(X)),assert(a(1):-write('aa')), retractall(b(X)),assert(b(1):-write('bb')). Я хочу, чтобы пользователь набрал a(1) или же b(1)программа для …
09 ноя '13 в 11:22
1 ответ

Пролог - Использование динамических с утверждениями

Я новичок в Прологе, и мне трудно использовать динамический предикат. Во-первых, вот код, который я выполняю :- dynamic(list/1). add(X, LL) :- asserta(list([])), asserta(list(X)), retract(list(LL)). Я знаю, что код выглядит странно, но я просто ищу …
08 апр '14 в 16:48
0 ответов

Утверждение правила Пролога с именем переменной

Я пытаюсь автоматически утверждать некоторые правила в SWI-Prolog: generate_rule_len(FG,SG):- length(FG,L),length(SG,L0), Head = input_len(FG,SG,FS,SS,X), Body = (length(FG,L1),L1 is L, length(SG,L2), L2 is L0, X = SS), % Rule = (Head :- Body), \+Ru…
03 янв '18 в 12:21
1 ответ

Чтение ввода с использованием Пролога

Извините, если это очевидно, но я недавно изучал пролог и пытаюсь прочитать данные для использования в рекомендательной системе. gifter :- write('how much money? '), read(money), nl, assert(will_spend(money)), write('Is the giftee classy? '), read(c…
21 окт '15 в 03:35
2 ответа

Невозможно создать Fact в Jekejeke Prolog

Я использую учебник Пролог "Семь языков за семь недель" и пытаюсь пробежаться по нескольким примерам, используя Android Jekejeke Runtime. Например, если я добавлю likes(wallace, grommit). из учебника я понял. Error: Undefined, private or package loc…
09 фев '15 в 09:58
2 ответа

Пролог: Различное поведение одинарных и двойных кавычек

Я довольно новичок в Прологе и наткнулся на то, чего не понимаю. Это мой код: :- dynamic user/3. user('id', 'Name', 20). changeAge(Id, NewAge) :- user(Id, Name, _), retract(user(Id,_,_)), assert(user(Id,Name,NewAge)). Чтобы обновить информацию о пол…
1 ответ

Утверждение и откат для эмуляции глобальных переменных

Я делаю это для эмуляции глобальных переменных: update_queue(NewItem) :- global_queue(Q), retractall(global_queue(Q)), append(Q, [NewItem], NewQ), assert(global_queue(NewQ)). Есть ли другой способ? (Кроме передачи переменных в качестве аргументов). …
1 ответ

Как отстаивать новое правило из пользовательского ввода (PROLOG)

Я хочу принять вход пользователя, т.е. [garfield, hates, blacky],hates/2 не существует в настоящее время В моей базе данных process:- read(Input_List), add_rule(Input_List). add_rule([X, Predicate, Y]):- assertz(Predicate(X, Y)). Но это не работает.…
30 ноя '11 в 12:40
1 ответ

Сохранить заявленные факты в Прологе

В прологе, если я утверждаю какой-то факт, например: assert(boy(john4)). assert(boy(john3)). assert(boy(john2)). assert(boy(john1)). Как я могу сохранить этот факт в файле?
07 апр '13 в 15:39
3 ответа

В чем разница между abolish/1 и retractall/1?

Прочитав руководство, я не могу найти разницу между ними. В руководстве сказано: Рекомендуется использовать retractall/1 для удаления всех предложений динамического предиката. Поэтому я решил использовать retractall/1 в моей программе; Однако мне ин…
27 дек '15 в 21:19
1 ответ

Пролог - Assert в новую базу данных

:-dynamic listofQuestions/2. myrule:- write('P = '), write(Percent), write('-'),write(X), ( listofQuestions(Percent,X) -> true ; assert(listofQuestions(Percent,X)) ), Фрагмент кода, возможно, не требуется, чтобы ответить на мой вопрос. Я хочу утв…
03 май '12 в 19:17
2 ответа

Как избежать использования assert и retractall в Prolog для реализации глобальных (или состояний) переменных

Я часто заканчиваю тем, что пишу код на Прологе, который включает в себя некоторое арифметическое вычисление (или информацию о состоянии, важную для всей программы), сначала получая значение, сохраненное в предикате, затем пересчитывая значение и, н…
1 ответ

Пролог и "обратный" вывод в экспертной системе

Я новичок в Прологе. Я сумел понять, как сделать простую экспертную систему, как go :- hypothesize(Vehicle), write('I guess that the Vehicle is: '), write(Vehicle), nl, undo. hypothesize(car) :- car, !. hypothesize(van) :- van,!. hypothesize(bike) :…
29 ноя '15 в 21:11
1 ответ

Лучший способ обновить / добавить факт в БД?

Скажем, у меня есть такие факты: fact(abc,2). Я хочу что-то вроде этого (псевдокод): fact_update(Functor,Name,AddToValue) :- if Fact_exist then update_fact : NewVal is CurrentValue + AddToValue else create_new_fact : Functor(Name,AddToValue) Я пробо…
22 ноя '15 в 20:05
3 ответа

Пролог решает определенное правило для выбора в зависимости от ввода

У меня проблема с прологом, которую я не могу обойти. То, чего я пытаюсь добиться, - это утвердить ФАКТ А, убрать Факт B, когда у меня есть ввод: взять и утвердить Факт Б и убрать Факт А, когда у меня есть ввод пут. то есть: :- dynamic s/2. :- dynam…
23 фев '13 в 23:25
1 ответ

Могу ли я использовать переменные с assert/1?

То, что я сейчас имею, проверяет, что X(Y) не является принятым фактом в моей маленькой БД. Поскольку X(Y) возвращает false, он попытается утвердить его. (Я понимаю, что это создает проблемы, когда X является правилом, а не фактом) ifNotAdd(X,Y):- n…
25 дек '11 в 02:17