Diagnostisches medizinisches Expertensystem zu Prolog

Eintrag


Irgendwie hatte ich das Glück, das Thema der Arbeit in Software Engineering zu wählen, und ich entschied mich außerdem, ein Expertensystem in der Sprache Prolog zu schreiben. Obwohl es in der industriellen Programmierung fast nie verwendet wird, ist es theoretisch interessant und ermöglicht es Ihnen, intelligente Systeme (IP) auf schnellste Weise zu berühren. Auch die Sprache selbst ist sportlich interessant, da Sie auf ungewöhnliche Weise denken, anders als bei prozeduraler Programmierung und OOP, einem guten Training für das Gehirn.

Wir haben die Implementierung von Prolog - Visual Prolog mit integrierten GUI-Bibliotheken verwendet. Aber wenn
Wenn Sie eine GUI in Qt / C ++ schreiben möchten, enthält die Dokumentation Anweisungen zum Importieren eines Programms in eine DLL und zum Kompilieren mit einem C / C ++ - Projekt. Daraus folgt, dass es mit anderen Sprachen kombiniert werden kann.

Als ich an diesem Projekt arbeitete, fand ich im Allgemeinen keine Beispiele, die nicht primitiv genug waren, aber gleichzeitig nicht so groß wie anspruchsvolle wissenschaftliche Beispiele. Daher kann dieser Artikel eine sehr gute Hilfe für Anfänger und Leute sein, die zumindest ein wenig ähnlich wie IP schreiben möchten.

Beschreibung des Systemzwecks: Es gibt eine Reihe von Parametern, die dem Herzsignal (EKG) entsprechen müssen, anhand derer Sie die Krankheit bestimmen können. Eine Person beantwortet die Fragen des Systems (im Dialogmodus), und das System, das als Experte für Herzerkrankungen fungiert, zieht Schlussfolgerungen über eine mögliche menschliche Krankheit.

Das heißt, Dieser Code kann als Framework (Prolog-Framework) zum Erstellen von Expertensystemen aus anderen Bereichen betrachtet werden, indem Sie einfach Ihre eigenen Regeln und Daten ersetzen. Die Regeln, nach denen das Einfügen ausgeführt wird, werden nachstehend beschrieben.

Prädikatenrechnung erster Ordnung und Prologsprache


Die Prolog-Sprache implementiert das logische Programmierparadigma, dessen Idee die Verwendung von Computertechnologie für die logische Schlussfolgerung aus der deklarativen Beschreibung des Themenbereichs ist. Dies unterscheidet es von prozeduralen Programmiersprachen, die genau definierte sequentielle Aktionen beschreiben. Daher sind prozedurale Sprachen nicht zum Schreiben von ES geeignet, und wenn sie verwendet werden, nur als Hilfsmodule. Ein weiteres Unterscheidungsmerkmal der Prolog-Sprache ist die Verwendung einer Teilmenge der Logiksprache erster Ordnung zur Beschreibung eines Programms, die bequemer und einfacher als für andere ist und von einer natürlichen Sprache zur Beschreibung der Welt durch den Menschen wechselt. Bei der Erstellung eines ES ist dies eines der wichtigsten Probleme - wie Domänenwissen in eine begrenzte formale Sprache übersetzt werden kann, während der von einer Person investierte Informationsgehalt erhalten bleibt. Aufgrund der intuitiven Verständlichkeit und Einfachheit im Vergleich zu Logik zweiter Ordnung oder anderen mathematischen Kalkülen besteht auch eine einfache Möglichkeit, Wissen von der formalen in die natürliche Form zurück zu übertragen.

Die Sprachkonstruktionen des Prologs können in Form von Implikationen der Form dargestellt werden:

A1, A2, …, An <= B1, B2, …,Bm (n>=0, m>=0) (1)

wobei Ai und Bi Atomformeln Fi (t1, t2, ..., tk) oder die Negation Fi (t1, t2, ..., tk) sind, wobei tk Terme sind (individuelle Konstante, Variable oder Ergebnis der Anwendung der Funktion)

In Prolog werden alle Beziehungen als Fakten und Regeln geschrieben, wobei in Formel (1) n = 1 ist, um die Effizienz der logischen Folgerung zu erhöhen. Die Regeln entsprechen einer Formel namens Hornformel:

A<=B1, B2, …, Bm , m>0 (2)

Die Fakten entsprechen der Formel (2) mit m = 0:

A<= (3)

Die Formel, die im Verlauf des Inferenzmechanismus bewiesen werden muss, ist die Formel (1) für n = 0, m> 0, die als Ziel oder Anforderung bezeichnet wird:

<= B1, B2, …Bm (4)

Diese Sprachkonstrukte umfassen das gesamte Prolog-Programm.
Zum Beispiel kann das folgende Wissen in Form eines Satzes in natürlicher Sprache - „Son Ani liebt Mascha“ - als Tatsache geschrieben werden:

 ((), ) 

und der Satz "Anya liebt jeden, den Olga liebt" in der Form:

 ((,X)<=(,X)) 

Oder die Argumentation „Jeder Mensch ist sterblich. Konfuzius ist ein Mann “:

 (()& ((X)<=(X)) <= () 

Der Prolog bietet auch Tools zum Definieren rekursiver Datenstrukturen wie Bäume und Listen, die zusätzliche Funktionen zur bequemen Beschreibung des relevanten Wissens bieten.

Somit ist ersichtlich, dass der Prolog eine flexible, einfache und intuitive Sprache zur Beschreibung von Wissen bietet.

Dann stellt sich jedoch die Frage, ob die Implementierung dieser Sprache gewählt werden soll, und es wurde beschlossen, ES für die Erweiterung der Prolog-Sprache - Visual Prolog - zu entwickeln.

Visueller Prolog


Visual Prolog ist ein Dialekt der Prolog-Sprache mit einer objektorientierten Erweiterung und einer integrierten Entwicklungsumgebung. Diese Umgebung bietet Unterstützung für die Erstellung grafischer Oberflächen und vieler anderer Bibliotheken. Die Prolog-Sprache ist sehr beliebt für die Erstellung von ESs mit einer einfachen Syntax, die in ihrer Bedeutung Domänenbeziehungen und Fakten ähnelt. Im Allgemeinen kann der Prolog-Sprachinterpreter selbst als ES im Sinne einer Prädikatenlogik erster Ordnung betrachtet werden, bei der der Benutzer eine Frage in Form eines Ziels stellt, dessen Wahrheit bewiesen werden muss. Dies ist eine deklarative Sprache, die beschreibt, was anstelle eines sequentiellen Algorithmus erhalten werden muss, und der perfekt ist, um das Wissen eines kleinen ES zu beschreiben. Im Vergleich zu alternativen Umgebungen bieten AMZI Prolog und SWI-Prolog eine sehr effektive Schnittstelle für die Interaktion mit anderen Sprachen, entweder durch Verknüpfen von Objektdateien oder durch dynamisches Laden von DLLs anderer Sprachen oder als eigenständiges DLL-Modul. Visual Prolog ist ebenfalls gut dokumentiert und enthält viele Beispiele. Es besteht auch die Meinung, dass die Wahl einer Implementierungssprache, eine Art der Wissenspräsentation und eine Methode zur Argumentationsbildung im Vergleich zum Wissen eines Experten zweitrangig sind und nur den Mechanismus für deren erfolgreichen Einsatz beeinflussen. Das Vorhandensein von Literatur, die den Prolog als Mittel zur Erstellung von ES verwendet, zeigt jedoch die Eignung seiner Verwendung, zumindest in kleinen Systemen.

ES Design


In der Literatur ist es üblich, ESs in mehrere grundlegende Komponenten zu unterteilen, die wenig voneinander abhängig sind: die Wissensbasis, den Ausgabemechanismus und die Benutzeroberfläche.

Es gibt zwei Arten der Organisation von Expertensystemen: die Regeln und die Fakten.

Die Kenntnis der ES über die Regeln wird in Form von Produktionsregeln aufgezeichnet. Der linke Teil jeder Regel enthält eine Alternative zur Lösung des Problems, und die rechten Teile (Prämissen) werden durch andere Regeln festgelegt. Die einzige Ausnahme ist, wenn eine Regel nach Informationen in der Datenbank sucht, z. B. nach einer Antwort auf eine Frage. Der Algorithmus des Ausgabemechanismus wird auf einen Vergleich reduziert. Bei vielen Optionen wird die benötigte nach dem Prinzip der Konfliktlösung ausgewählt. Am Ende wird die ausgewählte Regel angewendet und alles beginnt von vorne. Die Vorteile einer solchen Organisation bestehen darin, dass es sehr einfach ist, Regeln zum System hinzuzufügen, ohne andere Regeln zu beeinflussen, und dass sie leicht ergänzt und geändert werden können, da der Programmierer nur die gewünschte Regel in den entsprechenden Regelblock einfügen muss. Eine solche Organisation weist auch Einschränkungen auf, nämlich, dass es notwendig sein wird, einen unnatürlichen Algorithmus zum Speichern von Trace zu organisieren oder eine Variable dafür in den Regeln zu verwenden, dies verletzt jedoch die Bequemlichkeit des Änderns der Regeln, da für jedes Regelprädikat das Speichern von Trace organisiert werden muss. Dies verletzt auch die Lesbarkeit des Programms und die Möglichkeit, den Ausgabemechanismus im Allgemeinen zu ändern, da zusammen mit den Informationen über die Regeln das Durchlaufen durch die Aktion des Ausgabemechanismus beibehalten wird. Darüber hinaus können Sie mit dem Prolog die Regeln nicht in der Datenbankdatei speichern und die Regeln aus der Datenbank lesen, wodurch die Wissensdatenbank nicht aktualisiert werden kann, während das Programm ausgeführt wird. Listing 1 enthält ein Beispiel für eine solche Wissensdatenbankorganisation.

Listing 1

 diag("SIRS"):- diag2("SIRS"). diag("Sepsis"):- diag("SIRS"), have("Sepsis character"). diag("Hard sepsis"):- diag("Sepsis"), have("Hard sepsis character"). diag("Shock sepsis"):- diag("Hard sepsis"), have("Shock sepsis character"). diag("MOF"):- diag("Hard sepsis"), have("MOF sepsis character"). diag("MOF"):- diag("Shock sepsis"), have("MOF sepsis character"). 

Wie aus Listing 1 ersichtlich, sollte der Ausgabemechanismus vollständig durch den integrierten Standard-Prolog-Ausgabemechanismus gesteuert werden.

ES, die nach der Logik (nach den Fakten) organisiert sind, sind flexibler, da sie im Gegensatz zur direkten Verbindung von Regeln nach einer Referenzmethode (indirekt) zur Beschreibung der Beziehung von Regeln organisiert sind. Beziehungen werden in Begriffen wie Regelnummern und nicht in verschachtelten Regeln geschrieben. Eine solche Aufzeichnung ist konsistenter mit einer strengen Aufzeichnung in Form von Sätzen der Prädikatenlogik, was den Mechanismus zum Ableiten solcher Regeln flexibler macht. Im Gegensatz zu der Organisation, die auf den Regeln basiert, hängt die Suche nach der Prolog-Lösung weniger vom Prozess der logischen Folgerung der nächsten Regel ab, da neben der Ausgabe auch einige andere Aktionen ausgeführt werden können, z. B. ein alternativer Entscheidungsbaum durchlaufen oder sogar der Ausgabefluss geändert und unter Beibehaltung in die Ausgangsposition zurückgekehrt werden kann alle Daten darüber.

Wie in der Organisation arbeitet ein Zyklus hier nach den Regeln: Matching - Konfliktlösung - Übergang zur nächsten Regel. Da der Ausgabemechanismus jedoch indirekt gesteuert wird, ist es zweckmäßig, Informationen zum Finden einer Lösung im Prozess anzuzeigen und dieses Format zu ändern, ohne die Wissensbasis zu ändern. Der Hauptvorteil einer Organisation in Bezug auf Logik besteht darin, dass es möglich ist, Variablen, die während des Ausgabeprozesses zugeordnet werden, automatisch im Ausgabemechanismus verfügbar zu machen, und sie können zusammen mit einer Kette der letzten Regeln ausgegeben werden, die an das aktuelle Ziel ausgegeben werden. Dazu ist es jedoch erforderlich, zusätzlich einen Mechanismus für Geistertypen für verschiedene Regeltypen bereitzustellen. Außerdem wird die Wissensdatenbank als Fakten gespeichert, sodass sie gespeichert oder aus einer Datei auf dem Medium gelesen werden kann. Es ist schwieriger, das System anhand von Fakten als anhand der Regeln zu ändern und zu debuggen, da der Ausgabemechanismus durch die Werte von Variablen und Begriffen gesteuert wird, beispielsweise in Form einer Regelnummer, die zusätzliche Möglichkeiten für Fehler einführt.

Auch im Ausgabemechanismus gibt es mehr Variablen, die diesen Prozess beeinflussen, manchmal rekursiv und eher miteinander verbunden, was die Entwicklung erschwert und Fehler abfängt. Dies ist jedoch der Preis für die Flexibilität, die er bietet. Das System arbeitet auch effizienter und schneller an Fakten als an den Regeln, was besonders für sperrige Echtzeit-ES oder sogar für verteilte Echtzeit-ES wichtig ist.

Ein großer ES für die medizinische Diagnose bei Aufnahme von Patienten in kritischem Zustand, insbesondere bei gleichzeitiger Anwendung durch viele Ärzte, muss ebenfalls in einen strengen Zeitrahmen passen.

Es ist noch schwieriger, ein System aufgrund seiner Abhängigkeit von Fakten auf Fakten zu testen, da in einem System auf Regeln nur ein Fehler den Ausgabemechanismus beeinflussen würde und dies sofort sichtbar würde, aber höchstwahrscheinlich weiterhin an Fakten arbeiten würde.

Da das entwickelte System für den Benutzer informativ sein sollte, sollte im Zuge der logischen Folgerung eine vernünftige Antwort auf die Frage angezeigt werden - warum benötigte das System die angeforderten Informationen, damit der Benutzer weiß, in welchem ​​Stadium der Lösungssuche er sich befindet, was ohne Speichern der Ablaufverfolgung nicht erreicht werden kann Suche. Auch am Ende sollte der Benutzer nach Beantwortung der Frage den Beweisbaum für die gefundenen Lösungen sehen können. Angesichts aller Parameter des Systems schien mir das rationalste System die Regeln zu sein, da es auf der Festplatte gespeichert werden kann und sein Ausgabemechanismus einfacher zu organisieren ist. Das Wissen über die Diagnose von Herz-Kreislauf-Erkrankungen erwies sich aufgrund ihrer semantischen Vernetzung als schwierig zu formalisieren, insbesondere dort, wo die Bedeutung der Schlussfolgerungen der Regeln die Berücksichtigung zusätzlicher Informationen für jeden Einzelnen bedeutete. Daher wurde bei der Auswahl eines Mechanismus zum Austausch heterogener Daten zwischen Prädikaten eine Berechnung der logischen Art der Organisation durchgeführt.

Es gibt auch zwei Arten von Inferenz: inverse und direkte Inferenz. In komplexen medizinischen Konsultationssystemen wird immer noch eine Kombination dieser Typen verwendet: Ein bestimmter Wissensumfang wird von einem Typ abgeleitet, und ein anderer wird bereits auf seiner Grundlage verwendet.

Eine direkte Schlussfolgerung besteht darin, einen Effekt zu finden, der auf einer Vielzahl von Fakten basiert, und dann andere Schlussfolgerungen aus den neuen Konsequenzen zu ziehen. Es ist effektiv, wenn viele Hypothesen auf verschiedenen Ebenen miteinander verbunden sind, die bewiesen werden müssen, oder wenn viele Axiome zur Ableitung vieler weiterer Hypothesen vorliegen.

Die umgekehrte Schlussfolgerung ist das Gegenteil: Zuerst wird eine Hypothese ausgewählt, die bewiesen werden muss, und dann wird versucht, die Prämisse dieser Hypothese zu beweisen, bis die nächste Prämisse als Axiom gefunden wird.

In ES wird die Argumentation zu den Regeln durch die Methode der inversen logischen Inferenz implementiert, die Prolog verwendet. Diese Option wurde gewählt, da sie im Gegensatz zur direkten Inferenz mit diesem Wissen effizienter arbeitet, da die Anzahl der Zielscheitelpunkte viel mehr als Fakten ist und es keine konkurrierenden Hypothesen gibt (sie sind unabhängig).

Implementierung


In Prolog werden Regeln als Regelprädikat implementiert. Jede Regel hat ihre eigene Nummer und ihren eigenen Namen. Dies ist eine Hypothese (Schlussfolgerung), die bewiesen werden muss. Die Bedingung der Regel entspricht einer impliziten Aussage, die die Wahrheit der Hypothese vollständig bestimmt.

Regelbedingung:

 Colclusion(K)=C1(K) and (C2(K) or C3(K)) and C4(K) 

C1 (K) = Alle Schlussfolgerungen der Regeln mit den in der ersten Liste für die K-te Regel aufgezeichneten Zahlen sind wahr

C2 (K) = True, mindestens eine Regel aus der zweiten Liste für die K-te Regel
C3 (K) = Wirklich genau N (K) Schlussfolgerungen von Regeln aus der zweiten Liste für die K-te Regel

C4 (K) = Das Prädikat für die K-te Regel (Prädikat doc (K)), das vom Benutzer beschrieben wird.
Wenn eine Liste leer ist, ist die entsprechende Aussage wahr.

Gleichzeitig können alle anderen Prädikate in das Prädikat für C4 eingegeben werden, gleichzeitig sollten sie jedoch nicht die logische Bedeutung der Schlussfolgerung verletzen. Um die Ablehnung zu unterstützen, können hier auch einige vorhandene Schlussfolgerungen in der Wissensbasis eingegeben werden.

Der Ausgabemechanismus stellt sicher, dass die Regeln in der richtigen Reihenfolge angewendet werden, und speichert die Ablaufverfolgung.

Das Hauptprinzip der Schlussfolgerung besteht darin, die Wahrheit der Schlussfolgerung zu beweisen, alle ihre Schlussfolgerungen in der ersten Liste konsistent zu beweisen, dann die Schlussfolgerungen der zweiten Liste zu beweisen und am Ende die Wahrheit des Prädikats zu überprüfen, das der Nummer der aktuellen Regel entspricht. Um die zweite Liste zu überprüfen, werden alle weiteren Regeln bis zum Ende der Liste überprüft, wenn mindestens eine echte Regel gefunden wurde.

Prädikatbeschreibung


Im Allgemeinen wird das Prinzip der Wissenskodierung auf dem Prolog unter Verwendung von zwei Prädikaten in der folgenden Form implementiert:

Regel (K, "Schlussfolgerungstext ist der Name der Regel", Id, Liste1, Liste2, N)
doc (K)
K - Regelnummer
ID - Daten-ID für diese Regel
Liste1 - Die erste Liste der Regelnummern
Liste2 - zweite Liste der Regelnummern
N ist die Anzahl der wahren Schlussfolgerungen

Darüber hinaus wird die Regel immer als Tatsache ohne Variablen geschrieben, und ihre Wahrheit bestimmt, wie gesagt, zusätzlich zu Listen das entsprechende Prädikat doc.

Hier einige Beispiele für Schreibkenntnisse:

Regel (93, "TASH - TASH-Score 43%", tashSc10, [47], [], 0)
Regel (33, "TASH - Überschuss an Gründen - ist die Summe der Punkte", keine, [], [29,30,31,32], 1).

Im Prädikatdokument können beliebige andere Prädikate verwendet werden, wodurch es möglich ist, den Text der Anweisung der Regel der Menge aller Situationen zuzuordnen, die mit dem Prolog beschrieben werden können.

Auf diese Weise wird das gesamte Wissen unter Verwendung dieser beiden Prädikate aufgezeichnet.

In doc-Prädikaten werden die Benutzeroberflächenfunktionen hauptsächlich aufgerufen, da einige Regeln von Natur aus untrennbar mit der Antwort des Benutzers verknüpft sind oder nach gültigen Werten suchen.

Beispielsweise legt das Dokument Prädikate für Regeln fest, deren Wahrheit von dem Intervall abhängt, in dem sich die Gesamtpunktzahl befindet, und führt entsprechende Überprüfungen durch.

Das doc-Prädikat für die Diagnose von Sepsis-Erkrankungen verwendet das zusätzliche docc-Prädikat, mit dem dem Benutzer keine unnötigen Fragen gestellt werden können. Wenn für ein Zeichen beispielsweise mindestens zwei Zeichen erforderlich sind und die Antwort auf zwei Zeichen Nein lautet, sollte das System keine weiteren Fragen stellen, da es offensichtlich ist, dass das Zeichen nicht wahr sein kann. Zu diesem Zweck prüft das docc-Prädikat mehr als zwei negative Antworten in der Datenbank. Es macht auch keinen Sinn, die dritte Frage zu stellen, wenn bereits eine Antwort auf zwei Fragen vorliegt, die ausreichen, um die Wahrheit des resultierenden Merkmals festzustellen.

Das Prädikat kolNeg (Quantity) sucht nach der Anzahl der negativen Antworten in der Datenbank für diese Gruppe von Attributen. Dazu sucht er zunächst nach allen Arten von Zeichen dieser Zeichengruppe, um sie nicht mit anderen Gruppen zu verwechseln, und betrachtet sie dann aus der Menge in der Datenbank unter Verwendung des Prädikats kol_neg_list_in_db, das mit der Liste der Zeichen dieser Gruppe arbeitet.

Codebeispiele


Das Projekt ist groß, deshalb werde ich die wichtigsten Passagen geben.

Listing 2 - Liste der Regeln

 rule(11,"Sepsises - SIRS . 1: t>38C  t<36",sirsPr1,[],[],0). rule(12,"Sepsises -   >90",sirsPr2,[],[],0). rule(13,"Sepsises -  >20  PaCO2<32mmHg",sirsPr3,[],[],0). 

Listing 3 - Liste der Fakten

 fact1(sirsPr1,"SIRS","SIRS . 1: t>38C  t<36"). fact1(sirsPr2,"SIRS","  >90"). fact1(sirsPr3,"SIRS"," >20  PaCO2<32mmHg"). fact1(sirsPr4,"SIRS","- >12.000/mm>3, <4.000/mm>3  >10% band"). 

- Liste der logischen Konsequenzen

 tash_score(1,tashSc1,0,8,"  <5%"). tash_score(2,tashSc2,9,9,"  6%"). tash_score(3,tashSc3,10,10,"  8%"). 

Listing 4 - Ausgabemaschine

 sizeList([],0):-!. sizeList([_|T],Size):- sizeList(T,SizeTail), Size=SizeTail+1. append_der_list([],List,List). append_der_list([H|L1],List2,[H|L3]):- append_der_list(L1,List2,L3). any2(NeedSize,NeedSize,_,[],[],_):-!. any2(_,_,[],[],[],_):-!. any2(NeedSize,Size,[H|T1],[H|T2],[FirstDer|OtherDer],Why):- Nomer=[H], go(Nomer,UnderFirstDer,Why), rule(H,Text,_,_,_,_), FirstDer=tree(Text,unmarked,UnderFirstDer,0),%der(H,UnderFirstDer), Size1=Size+1,!, any2(NeedSize,Size1,T1,T2,OtherDer,Why). any2(NeedSize,Size,[_|T1],List,OrDer,Why):- !,any2(NeedSize,Size,T1,List,OrDer,Why). go([],[],_):-!. go([H|T],[FirstDer|OtherDer],Why):- rule(H,Name,_,ListAnd,ListOr,KolOr), NewWhy=[Name|Why], go(ListAnd,UnderFirstDer,NewWhy), goOr(ListOr,KolOr,_,OrDer,NewWhy), append_der_list(UnderFirstDer,OrDer,TwoDers), FirstDer=tree(Name,unmarked,TwoDers,0), asserta(why_trace(NewWhy)), doc(H,NewWhy), go(T,OtherDer,Why). goOr([],_,[],[],_):-!. goOr(ListOr,KolOr,ListYes,OrDer,Why):- KolOr<>0, any2(KolOr,0,ListOr,ListYes,OrDer,Why), sizeList(ListYes,KolOr). goOr(ListOr,0,ListYes,OrDer,Why):- any2(100000,0,ListOr,ListYes,OrDer,Why), sizeList(ListYes,KolListYes), KolListYes>0. 

Listing 5 - Abschluss der endgültigen Konsequenzen

 tashQuestion(Id):- fact2(Id,_,Prisnak,_), pos(Prisnak),!. tashQuestion(Id):- fact2(Id,_,Prisnak,_), neg(Prisnak),fail,!. tashQuestion(Id):- fact2(Id,_,Prisnak,Ball), not(neg(Prisnak)), not(pos(Prisnak)), dialog_ynw(Prisnak,Ans), tash_in_data_base(Ans,Prisnak,Ball),!. tash_in_data_base("y",Prisnak,Ball):- asserta(pos(Prisnak)),sum_tash(Sum1),Sum2=Sum1+Ball,asserta(sum_tash(Sum2)),!. tash_in_data_base("n",Prisnak,_):- asserta(neg(Prisnak)),!,fail. tash_in_data_base(_,_,_):- write("\nTASH-not correct answer"),!,fail. oneQuestion(Id):- fact1(Id,_,Prisnak), pos(Prisnak),!. oneQuestion(Id):- fact1(Id,_,Prisnak), not(neg(Prisnak)), question_sepsis(Prisnak),!. 

Schlussfolgerungen


Ich hoffe, dieser Artikel hilft Anfängern beim Aufbau ihres eigenen Expertensystems.

Source: https://habr.com/ru/post/de436722/


All Articles