Weiter: 12.4.3 Ein Standard-Beispiel
Hinauf: 12.4 Ein allgemeines
Zurück: 12.4.1 Die Standard-Logik
Fuzzy-Logik läßt sich wie folgt aus unserem allgemeinen Paket ableiten:
with General_Boolean;
Diesmal haben wir ein generisches Paket vorliegen, deren Parameter den
rellen Typ der Fuzzy-Logik einstellbar gestaltet.
Zusätzlich wurden Konstanten für zero und one
deklariert.
package body Fuzzy_Boolean is
function Convert(float: fuzzy_float) return fuzzy_bool
is
begin
return (General_Boolean.gen_bool with float);
end Convert;
function Convert(fuzzy: fuzzy_bool) return fuzzy_float
is
begin
return fuzzy.f;
end Convert;
function "
and"
(left,right: fuzzy_bool) return fuzzy_bool
is
h: fuzzy_bool;
begin
h.f := left.f right.f;
return h;
end "
and"
;
function "
or"
(left,right: fuzzy_bool) return fuzzy_bool
is
h: fuzzy_bool;
begin
h.f := 1.0 - (1.0 - left.f) (1.0 - right.f);
return h;
end "
or"
;
function "
not"
(val: fuzzy_bool) return fuzzy_bool
is
h: fuzzy_bool;
begin
h.f := 1.0 - val.f;
return h;
end "
not"
;
begin
if fuzzy_float'First ≠ 0.0 or else fuzzy_float'Last ≠ 1.0 then
raise constraint_error;
end if;
end Fuzzy_Boolean;
In der Implementierung wurde für ,,und`` die Multiplikation der
beiden Operanden gewählt.
Man könnte natürlich auch das Minimum der beiden Operanden wählen oder
gar einen Typ schaffen, wo die Operationen ,,and`` und ,,or``
abstrakt sind, und dann etwa in Kindpaketen die beiden unterschiedlichen
Realisierungsmöglichkeiten implementieren.
Da bei der Definition des generischen Parameters für den reellen Typ
der Fuzzy-Logik syntaktisch nicht berücksichtigt werden kann,
daß der reelle Typ nur Werte zwischen 0.0 und 1.0 annehmen kann,
geschieht diese Überprüfung im Paket-Body zum Zeitpunkt der Instantiierung.
Weiter: 12.4.3 Ein Standard-Beispiel
Hinauf: 12.4 Ein allgemeines
Zurück: 12.4.1 Die Standard-Logik
Johann Blieberger
Wed Feb 11 09:58:52 MET 1998