Künstliche Intelligenz und Prolog
Copyright © 2019 Jiri Kriz, www.nosco.ch

4    Wissens­repräsentation in Pure Prolog

Lösung der Aufgaben

4.1    Verkehrsmittel

verkehrsmittel( X) :- 
	oeffentlich_vm( X).
verkehrsmittel( X) :- 
	privat_vm( X).

oeffentlich_vm( bus).
oeffentlich_vm( zug).
oeffentlich_vm( flugzeug).
oeffentlich_vm( schiff).

privat_vm( velo).
privat_vm( motorrad).
privat_vm( auto).

fahrzeug( velo).
fahrzeug( motorrad).
fahrzeug( auto).
fahrzeug( bus).

motor_fahrzeug( X) :- 
	hat_motor( X).

langsam( velo).
umweltfreundlich( velo).

schnell( auto, mittel).
gefaehrlich( auto).
hat_benzinmotor( auto).

schnell( bus, relativ).
hat_benzinmotor( bus).

schnell( zug, mittel).
hat_elektromotor( zug).

schnell( flugzeug, sehr).
hat_benzinmotor( flugzeug).

langsam( schiff).
hat_dieselmotor( schiff).

umweltbelastend( X) :- 
	hat_benzinmotor( X).
umweltbelastend( X) :- 
	hat_dieselmotor( X).
umweltfreundlich( X) :- 
	hat_elektromotor( X).

sicher( X) :- 
    oeffentlich_vm( X).

hat_motor( X) :- 
	hat_benzinmotor( X).
hat_motor( X) :- 
	hat_dieselmotor( X).
hat_motor( X) :- 
	hat_elektromotor( X).

schnell( X) :- 
	schnell( X, _).

/* 
?- verkehrmittel( X), schnell( X)     ... etc.
?- schnell( flugzeug)          
?- schnell( flugzeug, Wie)
?- fahrzeug( X), hat_motor(X)  
Um die Frage "Welche Eigenschaften hat das Auto" beantworten zu koennen,
muss die Wissensbank erweitert werden, z.B.:
eigenschaft( auto, [schnell, gefaehrlich, hat_benzinmotor]).
oder die Repraesentation muss geaendert werden, z.B.:
objekt( auto, schnell).
*/

Back to example 4.1

4.2    Probleme mit Isolatoren

kurzschluss( ueberschlag).
kurzschluss( durchschlag).
kurzschluss( kriechstrom).

ursache( ueberschlag, ueberspannung).
ursache( ueberspannung, blitz).
ursache( durchschlag, material_fehler).
ursache( durchschlag, material_riss).
ursache( kriechstrom, 
    'oberflaeche feucht und verschmutzt').
ursache( kriechstrom, 
    'material = phenoplast').
ursache( kriechstrom, 
    'material = andere Kunstharze').

folge( Ursache, Folge) :- 
    ursache( Folge, Ursache).
folge( durchschlag, zerstoerung).
folge( kriechstrom, kriechweg).
folge( kriechweg, 'Isolator ersetzen').

Back to example 4.2

4.3    Netzwerk von Widerständen

res( NW, R) :- 
    resistor( NW, R).
res( seq( NW1, NW2), R) :- 
    res( NW1, R1), 
    res( NW2, R2), 
    R is R1 + R2.
res( par( NW1, NW2), R) :- 
    res( NW1, R1), 
    res( NW2, R2), 
    S is 1/R1 + 1/R2, 
    R is 1/S.

Back to example 4.3

4.4    Digitale Schaltungen

adder1( I1, I2, C_in, Out, C_out) :-
    xor( I1, I2, X), 
    and( I1, I2, A1), 
    and( X, C_in, A2),
    xor( X, C_in, Out), 
    or( A1, A2, C_out).

adder( [], [], [], 0).
adder( [ I1| I1s], [ I2| I2s], [ O| Os], Overflow) :-
    adder( I1s, I2s, Os, Carry),
    adder1( I1, I2, Carry, O, Overflow).

or( 0, 0, 0).
or( 0, 1, 1).
or( 1, 0, 1).
or( 1, 1, 1).

xor( 0, 0, 0).
xor( 0, 1, 1).
xor( 1, 0, 1).
xor( 1, 1, 0).

and( 0, 0, 0).
and( 0, 1, 0).
and( 1, 0, 0).
and( 1, 1, 1).

Back to example 4.4