home *** CD-ROM | disk | FTP | other *** search
- "==================================="
- " DIAGNOSE-SYSTEM MIT ERKLAERUNGEN "
- "==================================="
-
-
- " W I S S E N S B A S I S "
-
-
- Regel(1,<Kabel-am-Zuendschloss-lose,pos>.nil,<Kabel-lose,pos>) ->;
- Regel(2,<Batteriekabel-lose,pos>.nil,<Kabel-lose,pos>) ->;
- Regel(3,<Kabel-an-der-Zuendspule-lose,pos>.nil,<Kabel-lose,pos>) ->;
- Regel(4,<Kabel-am-Verteiler-lose,pos>.nil,<Kabel-lose,pos>) ->;
- Regel(5,<Kabel-an-den-Zuendkerzen-lose,pos>.nil,<Kabel-lose,pos>) ->;
- Regel(6,<Kabel-am-Zuendschloss-lose,neg>.
- <Batteriekabel-lose,neg>.
- <Kabel-an-der-Zuendspule-lose,neg>.
- <Kabel-am-Verteiler-lose,neg>.
- <Kabel-an-den-Zuendkerzen-lose,neg>.nil,
- <Kabel-lose,neg>) ->;
- Regel(7,<Funke-am-Unterbrecherhebel,neg>.nil,
- <zu-starker-Funke-am-Unterbrecherhebel,neg>) ->;
- Regel(8,<Unterbrecherkontakte-verschmort,pos>.
- <Unterbrecher-o-Kondensator-o-Zuendspule,pos>.nil,
- <Funke-am-Unterbrecherhebel,neg>) ->;
- Regel(9,<Ladekontrollampe-verloescht-beim-Starten,pos>.nil,
- <Anlasser-dreht-Motor-durch,neg>) ->;
- Regel(10,<Kabel-lose,neg>.
- <Anlasser-dreht-Motor-durch,pos>.
- <Batterie-leer,neg>.
- <Zuendspule-gibt-starken-Funken,pos>.nil,
- <Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>) ->;
- Regel(11,<Kabel-lose,neg>.
- <Anlasser-dreht-Motor-durch,pos>.
- <Zuendspule-gibt-starken-Funken,neg>.nil,
- <Unterbrecher-o-Kondensator-o-Zuendspule,pos>) ->;
- Regel(12,<Anlasser-dreht-Motor-durch,pos>.
- <starker-Benzingeruch-am-Auspuff,pos>.
- <Elektroden-der-Zuendkerzen-trocken-und-sauber,neg>.nil,
- <Motor-ersoffen,pos>) ->;
- Regel(13,<Unterbrecher-o-Kondensator-o-Zuendspule,pos>.
- <Unterbrecherkontakte-blau,pos>.
- <zu-starker-Funke-am-Unterbrecherhebel,pos>.nil,
- <Kondensator-defekt,pos>) ->;
- Regel(14,<Unterbrecher-o-Kondensator-o-Zuendspule,pos>.
- <Unterbrecherkontakte-verschmort,pos>.nil,
- <Unterbrecher-defekt,pos>) ->;
- Regel(15,<Unterbrecher-o-Kondensator-o-Zuendspule,pos>.
- <Unterbrecherhebel-hebt-ab,neg>.nil,
- <Unterbrecher-defekt,pos>) ->;
- Regel(16,<Unterbrecherhebel-hebt-ab,pos>.
- <Unterbrecherkontakte-verschmort,neg>.
- <Unterbrecherkontakte-verschmutzt>.nil,
- <Unterbrecher-defekt,neg>) ->;
- Regel(17,<Ladekontrollampe-brennt,pos>.nil,
- <Batteriekabel-lose,neg>) ->;
- Regel(18,<Innenraumleuchte-brennt,pos>.nil,
- <Batteriekabel-lose,neg>) ->;
- Regel(19,<Batteriekabel-lose,pos>.nil,
- <Ladekontrollampe-brennt,neg>) ->;
- Regel(20,<Batteriekabel-lose,pos>.nil,
- <Innenraumleuchte-brennt,neg>) ->
- Regel(21,<Innenraumleuchte-brennt,pos>.nil,
- <Batterie-leer,neg>) ->;
- Regel(22,<Ladekontrollampe-brennt,neg>.
- <Innenraumleuchte-brennt,pos>.
- <Kabel-am-Zuendschloss-lose,neg>.nil,
- <Zuendschloss-defekt,pos>) ->;
- Regel(23,<Ladekontrollampe-brennt,neg>.
- <Innenraumleuchte-brennt,neg>.
- <Batteriekabel-lose,neg>.nil,
- <Batterie-leer,pos>) ->;
- Regel(24,<Ladekontrollampe-brennt,pos>.
- <Kabel-lose,neg>.
- <Ladekontrollampe-verloescht-beim-Starten,neg>.
- <Anlasser-dreht-Motor-durch,neg>.nil,
- <Anlassschalter-defekt,pos>) ->;
- Regel(25,<Ladekontrollampe-brennt,pos>.
- <Kabel-lose,neg>.
- <Ladekontrollampe-verloescht-beim-Starten,pos>.
- <Anlasser-dreht-Motor-durch,neg>.
- <Batterie-leer,neg>.nil,
- <Kurzschluss-im-Anlasser,pos>) ->;
- Regel(26,<Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>.
- <Elektroden-der-Zuendkerzen-trocken-und-sauber,pos>.
- <Zuendkerze-gibt-starken-Funken,pos>.
- <Kraftstoffanlage-ok,pos>.nil,
- <Motoreinstellung-falsch,pos>) ->;
- Regel(27,<Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>.
- <Elektroden-der-Zuendkerzen-trocken-und-sauber,pos>.
- <Zuendkerze-gibt-starken-Funken,neg>.
- <Zuendkerzenstecker-gibt-starken-Funken,pos>.nil,
- <Zuendkerzen-defekt,pos>) ->;
- Regel(28,<Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>.
- <Elektroden-der-Zuendkerzen-trocken-und-sauber,neg>.
- <Verteiler-defekt,neg>.nil,
- <Zuendkerzenkabel-defekt,pos>) ->;
- Regel(29,<Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>.
- <Verteilerkappe-nass-oder-gebrochen,pos>.nil,
- <Verteiler-defekt,pos>) ->;
- Regel(30,<Hauptzuendkabel-o-Verteiler-o-Zuendkerzen-o-Motor,pos>.
- <Verteilerfinger-defekt,pos>.nil,
- <Verteiler-defekt,pos>) ->;
- Regel(31,<Verteilerfinger-defekt,neg>.
- <Verteilerkappe-nass-oder-gebrochen,neg>.nil,
- <Verteiler-defekt,neg>) ->;
- Regel(32,<Unterbrecher-o-Kondensator-o-Zuendspule,pos>.
- <Funke-am-Unterbrecherhebel,pos>.
- <Unterbrecherkontakte-blau,neg>.nil,
- <Zuendspule-defekt,pos>) ->;
- Regel(33,<Unterbrecher-o-Kondensator-o-Zuendspule,pos>.
- <Funke-am-Unterbrecherhebel,neg>.
- <Unterbrecher-defekt,neg>.nil,
- <Zuendspule-defekt,pos>) ->;
-
-
-
- Defekt(Batterie-leer) ->;
- Defekt(Zuendschloss-defekt) ->;
- Defekt(Batteriekabel-lose) ->;
- Defekt(Kabel-am-Zuendschloss-lose) ->;
- Defekt(Kabel-an-der-Zuendspule-lose) ->;
- Defekt(Kabel-am-Verteiler-lose) ->;
- Defekt(Kabel-an-den-Zuendkerzen-lose) ->;
- Defekt(Anlassschalter-defekt) ->;
- Defekt(Kurzschluss-im-Anlasser) ->;
- Defekt(Unterbrecher-defekt) ->;
- Defekt(Verteiler-defekt) ->;
- Defekt(Zuendspule-defekt) ->;
- Defekt(Motor-ersoffen) ->;
- Defekt(Zuendkerzen-defekt) ->;
- Defekt(Zuendkerzenkabel-defekt) ->;
- Defekt(Motoreinstellung-falsch) ->;
-
-
- " I N F E R E N Z - M E C H A N I S M U S "
-
- Loesung(d) ->
- Defekt(d)
- wahres-Faktum(<d,pos>,<0,<d,pos>>.nil)
- /;
-
- wahres-Faktum(<q,r>,l-a) -> Antwort(<q,r1>) / eq(r,r1);
- wahres-Faktum(<q,r>,l-a) -> Folgerung(<q,r1>) / eq(r,r1);
- wahres-Faktum(<q,r>,k.l-a) ->
- Regel(n,l-f,<q,r'>)
- nicht-enthalten(n,l-a)
- Liste-wahrer-Fakten(l-f,n,k.l-a)
- /
- eq(r,r');
- wahres-Faktum(<q,r>,l-a) ->
- keine-Regel-trifft-zu(<q,r>)
- Frage-Antwort(<q,r>,l-a,r);
-
- Liste-wahrer-Fakten(nil,n,l-a) ->;
- Liste-wahrer-Fakten(f.l-f,n,l-a) ->
- wahres-Faktum(f,<n,f>.l-a)
- speichere(f)
- Liste-wahrer-Fakten(l-f,n,l-a);
-
- keine-Regel-trifft-zu(f) -> Regel(n,l-f,f) / fail;
- keine-Regel-trifft-zu(f) ->;
-
-
- " B E N U T Z E R - S C H N I T T S T E L L E "
-
- experte ->
- message
- loesche-alte-Antworten-und-Folgerungen
- Loesung(d)
- outm("Moeglicher Defekt < ")
- out(d)
- outml(" >")
- fail;
-
- message ->
- outml("Ihr Wagen springt nicht an?")
- line
- outml("Keine Sorge, ich helfe Ihnen bei der Fehlersuche! ")
- outml("Hierzu werde ich Ihnen eine Reihe von Fragen stellen:");
-
- Frage-Antwort(<q,r>,l-a,r) -> Antwort(<q,r1>) / eq(r,r1);
- Frage-Antwort(<q,r>,l-a,r) -> Folgerung(<q,r1>) / eq(r,r1);
- Frage-Antwort(<q,r>,l-a,r) ->
- Frage(q,l-a,r')
- assert(Antwort(<q,r'>),nil)
- eq(r,r');
-
- Frage(q,l-a,r) ->
- line
- outm("Ist es wahr, dass : ")
- outl(q)
- outm("ja/nein/warum ? ")
- in-ident(r')
- verarbeite(r',q,l-a,r);
-
- verarbeite(ja,q,l-a,pos) ->;
- verarbeite(nein,q,l-a,neg) ->;
- verarbeite(warum,q,<n,p>.l-a,r) ->
- Regel(n,l-p,c)
- outm("Weil ich mit Regel Nummer ")
- out(n)
- outml(" zu zeigen versuche, dass :")
- outm(" ")
- Aussagen-Ausgabe(c)
- conc(l1,p.l2,l-p)
- outml("Ich weiss bereits, dass gilt :")
- Listen-Ausgabe1(l1)
- outml("Ich weiss noch nicht, ob gilt :")
- Listen-Ausgabe2(p.l2)
- Frage(q,l-a,r);
- verarbeite(warum,q,<0,d>.nil,r) ->
- Aussagen-Ausgabe(d)
- outml(" ist der Defekt, den ich nachzuweisen versuche")
- Frage(q,<0,d>.nil,r);
- verarbeite(r1,q,l-a,r') ->
- dif(r1,ja)
- dif(r1,nein)
- dif(r1,warum)
- Frage(q,l-a,r');
-
- Listen-Ausgabe1(nil) -> outm(" * * * * * *") line;
- Listen-Ausgabe1(x.y) -> Listen-Ausgabe2(x.y);
-
- Listen-Ausgabe2(nil) ->;
- Listen-Ausgabe2(x.y) ->
- outm(" ")
- Aussagen-Ausgabe(x)
- Listen-Ausgabe2(y);
-
- Aussagen-Ausgabe(<x,pos>) -> out(x) line;
- Aussagen-Ausgabe(<x,neg>) -> outm("non ") out(x) line;
-
-
- " H I L F S P R A E D I K A T E "
-
- loesche-alte-Antworten-und-Folgerungen ->
- rule(Antwort(q),t)
- suppress(1)
- fail;
- loesche-alte-Antworten-und-Folgerungen ->
- rule(Folgerung(q),t)
- suppress(1)
- fail;
- loesche-alte-Antworten-und-Folgerungen ->;
-
- speichere(f) ->
- Folgerung(f)
- /;
- speichere(f) ->
- Antwort(f)
- /;
- speichere(f) ->
- assert(Folgerung(f),nil);
-
- nicht-enthalten(n,nil) ->;
- nicht-enthalten(m,<n,q>.l) -> dif(m,n) nicht-enthalten(m,l);
-
- conc(nil,l,l) ->;
- conc(x.l1,l2,x.l3) -> conc(l1,l2,l3);