"OR" Operator für nicht boolesche typen?

OP #3972587
Abend.
Ich habe sowas hier:

TYPE COLOR(RED,GREEN,BLUE);
SIGNAL CLR: COLOR:=RED;

A<=B WHEN CLR= RED OR GREEN;


Leider gibt mein Compiler ein Fehler aus, da die RED, GREEN etc. nicht 
boolesche Typen sind, also darf man die nicht mit "OR" Verknüpfen.

Gibt es ein Umweg, wie ich sowas richtig schreiben kann?
Moderator (Firma: Titel) Persönliche Seite
Böser Kommunist schrieb:
> A<=B WHEN CLR= RED OR GREEN;
>
> Leider gibt mein Compiler ein Fehler aus, da die RED, GREEN etc. nicht
> boolesche Typen sind, also darf man die nicht mit "OR" Verknüpfen.
>
> Gibt es ein Umweg, wie ich sowas richtig schreiben kann?
Du könntest den OR Operator überladen. Der ist schließlich auch nur 
als Funktion definiert.
Allerdings kann ich mir nicht so richtig vorstellen, wie man überhaupt 
Farben verodern könnte. Und auch nicht, wie wie die Ergebnisfarbe 
z.B. der Berechnung von "rot oder grün" bzw. "rosa oder braun" aussehen 
würde. Und am allerwenigsten, was man damit anfangen könnte...
Du erkennst das Dilemma?

> Gibt es ein Umweg, wie ich sowas richtig schreiben kann?
Ergo ergibt sich aus meinen obigen Überlegungen, dass du die Farben 
tatsächlich nicht verodern wolltest, sondern (wie vorgeschlagen) 
abfragen wollstest, ob entweder die Farbe=rot oder ob die Farbe=grün 
ist...
Naja, wenn es erstmal um den "Use-case" geht, dass man ein = mit 
veroderten Einzelfarben als Möglichkeit der Auswahl hat, kann man ja die 
Einzelfarben diskret auf die Bits eines Vektors legen und noch ein 
Flagbit für die Mischung setzen. Das = müsste das Bit dann auswerten und 
dann selbst nochmal binär ORen und bei !=0 (äh, /=0...) true 
zurückliefern.

Anekdote am Rande: Das mit OR aus Auswahl ist recht intuitiv. Ich hatte 
mich bei meinen ersten Basteleien am ZX81 schon gefragt, warum "PRINT 2 
OR 3" immer nur 1 ergab und nicht mal 2 oder 3 ;)
Gast
Böser Kommunist schrieb:
> A<=B  wenn Zustand  RED oder Zustand Blau.

Wenn du es dann auch so hinschreibst, tut es ja

A<=B when CLR=RED or CLR=BLUE;

Der Vergleich CLR=RED  liefert ein Ergebnis (Wahr oder Falsch)
Der Vergleich CLR=BLUE liefert ein Ergebnis (Wahr oder Falsch)
Der Operator OR verknüpft die beiden
Wenn mindestens ein Vergleichsergebnis wahr ist, dann ist die Logische 
Verknüpfung wahr.

Wenn du aber schreibst:
..when CLR=RED or BLUE, dann kann das keine logische Operation sein.

CLR=RED liefert wahr oder falsch. Aber BLUE? Was soll das sein? wahr 
oder falsch?
Also kann das or nichts damit anfangen.

Das ist das Problem des alltäglichen Sprachgebrauchs.
Gehe aus der Kneipe, wenn DU=BESOFFEN or PLEITE.
Das ist aber Umgangssprache. Es wir implizit angenommen, dass sich 
PLEITE auch auf dich bezieht. Genaugenommen ist das aber falsch. Es 
könnte auch heißen, dass dein Kumpel pleite sein muss.
Dann müsste die Gleichung Lauten:

Gehe nach Hause, wenn DU=BESOFFEN or KUMPEL=PLEITE

Und da der Compiler nicht raten kann, was du meinst, wer hier pleite 
sein soll, geschweige denn, Umgangssprache beherrscht, musst du ihm 
sagen, WER PLEITE sein muss .. oder in deinem Fall eben BLAU :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.