Чтение из файла в базу данных пролога - PullRequest
0 голосов
/ 14 января 2019

Привет всем

У меня проблема с частью моего проекта для учебы. Моя задача состоит в том, чтобы написать программу на прологе, которая может рассказать вам, какие у вас есть болезни, основываясь на данных пользователя. База данных должна быть прочитана из файла, формат которого до меня.

Конструкция:

Я решил иметь 2 динамических правила;

:- dynamic (illness/2).
:- dynamic (symptoms/4).

где:

illnes(name_of_illness, symptoms(symptom1, symptom2, symptom3, symptom4)

Файл: example.txt:

flu,cough,fever,head_acke, runny_nose.
measles, rash, fever, sore_throat, inflamed_eyes.

Проблема:

Моя главная проблема - отформатировать эти данные для использования предиката asserta, я пробовал много способов, но он не работал.

Спасибо

1 Ответ

0 голосов
/ 14 января 2019

Итак, на ваш другой вопрос , я думаю, вы можете проанализировать эти строки с помощью split_string/4, ваша проблема в том, что в результате получаются не атомы, а затем вам нужно правильно построить структуру. Я думаю, что это кусок, который вам не хватает:

?- split_string("this,that,the,other,thing", ",", " ", X), 
   maplist(atom_string, [Condition,Sym1,Sym2,Sym3,Sym4], X), 
   Result = illness(Condition, symptoms(Sym1,Sym2,Sym3,Sym4)).
X = ["this", "that", "the", "other", "thing"],
Condition = this,
Sym1 = that,
Sym2 = the,
Sym3 = other,
Sym4 = thing,
Result = illness(this, symptoms(that, the, other, thing)).

Если вы просто asserta(Result) добавили правильную информацию в базу данных.

Если у вас есть переменное количество симптомов, вы должны вместо этого сохранить его в списке, и это значительно упростит вашу обработку (и, вероятно, наш последующий код, поскольку выполнение чего-либо четыре раза подряд немного повторяется):

?- split_string("this,that,the,other,thing", ",", " ", X), 
   maplist(atom_string, [Condition|Symptoms], X), 
   Result = illness(Condition, symptoms(Symptoms)).
X = ["this", "that", "the", "other", "thing"],
Condition = this,
Symptoms = [that, the, other, thing],
Result = illness(this, symptoms([that, the, other, thing])).
...