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, _).
Back to example 4.1
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
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
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