Seite 1 von 1

Vergleichs-Ausdruck liefert keinen boolschen Wert (erledigt)

Verfasst: 21.06.2006 11:54
von PureLust
Hallo zusammen, ...

ich wollte den boolschen Rückgabewert eines Vergleichsausdrucks (z.B. "Var < 1000") innerhalb einer Berechnung verwenden.
Jedoch liefert z.B. der Ausdruck "Var < 200" als Ergebnis IMMER "200" zurück, anstatt 0 für #False bzw. 1 für #True.

Bsp:

Code: Alles auswählen

TestValue = 800
Debug Str(TestValue)+" > 200  :  "+Str(TestValue > 200)
Debug Str(TestValue)+" = 200  :  "+Str(TestValue = 200)
Debug Str(TestValue)+" < 200  :  "+Str(TestValue < 200)
Normalerweise kenne ich das so, dass als Resultat eines solchen Ausdrucks 0 oder 1 (bzw. 0 oder -1) zurückgegeben wird.
Auch laut PB-Hilfe sollte hier True oder False zurück gegeben werden.

Habe ich da irgendwo einen Denkfehler, mache ich was falsch oder ist dies im Grunde eine PB Eigenart (bzw. ein Bug)?

Gruß, PL.

Verfasst: 21.06.2006 12:08
von #NULL
laut hilfe wird 'true' bzw 'false' zurückgegeben, aber nicht #True oder #False oder 1 , -1, oder 0 ect.
boolsche operatoren geben in PB, soweit ich weiss, keine weiterverwendbaren integer zurück, wie das in C der fall ist. ( :cry: leider)

sowas geht auch nicht:
equals_counter + (a=b) --------( = equals, nicht die zuweisung)

Verfasst: 21.06.2006 12:18
von Green Snake
Du kannst da ein bisschen tricksen:

Code: Alles auswählen

TestValue = 800 
Debug Str(TestValue)+" > 200  :  "+Str(0 Or TestValue > 200) 
Debug Str(TestValue)+" = 200  :  "+Str(0 Or TestValue = 200) 
Debug Str(TestValue)+" < 200  :  "+Str(0 Or TestValue < 200)

Verfasst: 21.06.2006 12:46
von PureLust
@Green Snake:

super WA - vielen Dank !!! :allright:


Ich hatte es schon per "Str((TestValue < 200)=#True)" versucht, leider auch ohne Erfolg.

PureBasic scheint als Ergebnis also erst einen bolschen Wert zurückzugeben, wenn im Ausdruck ein logischer Operant verwentet wird.

Ist zwar ein bischen unlogisch und auch inkonsistent .... aber naja. :roll:

Auf jeden Fall erst mal vielen Dank für den Tip - nun komm' ich weiter. :allright:

Greetz & Thanks,
PureLust.

Verfasst: 21.06.2006 13:43
von jear
@PureLust
Das ist schon ausführlich diskutiert worden(z.B. hier) und lässt sich zur Zeit nur durch einen Macro in PB4 lösen.

Hier noch mal ein Beispiel:

Code: Alles auswählen

Macro Is(BooleanExpression) 
  (#False Or(BooleanExpression)) 
EndMacro 


a = 50 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 
a = 60 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 
a = 70 : Debug Is(a<60) : Debug Is(a=60) : Debug Is(a>60) 

File.s = "Test.vob" 
IsVOB.b = Is(LCase(GetExtensionPart(file)) = "vob") 
Debug IsVOB
Wird hoffentlich in einer neuen Version von Fred mal in PB integriert.

Verfasst: 21.06.2006 15:13
von PureLust
Hallo jear,

vielen Dank für den Link - ich habe mich da mal durchgeackert. ;)
Scheinbar wurde diese Geschichte ja von Fred nicht beachtet, da in der PB4-Final noch keine Lösung diesbezüglich integriert ist.

Naja ... wenn man sowas weiss, so kann man sich natürlich auch mit dem Macro bzw. dem oben stehenden Tip von Green Snake behelfen.

@André:
Es wäre vielleicht sinnvoll, dieses 'nicht gerade gebräuchliche' Verhalten auch in der Hilfe (z.B. bei "Variablen, Typen und Operatoren") zu erwähnen.
Für Programmierer mit Kenntnissen aus anderen Sprachen (die es also anders gewöhnt sind) würde dies vermutlich hilfreich sein.

ThanX an Alle die geholfen haben, :allright:
PureLust.

Verfasst: 24.06.2006 02:38
von Andre
PureLust hat geschrieben:@André:
Es wäre vielleicht sinnvoll, dieses 'nicht gerade gebräuchliche' Verhalten auch in der Hilfe (z.B. bei "Variablen, Typen und Operatoren") zu erwähnen.
Für Programmierer mit Kenntnissen aus anderen Sprachen (die es also anders gewöhnt sind) würde dies vermutlich hilfreich sein.
Hierfür bräuchte ich dann bloß eben auch einen vollständigen Textvorschlag. Eine eigene 100%ige Erklärung bekomme ich mangels Kenntnisse anderer Sprachen so nicht hin.

Verfasst: 25.06.2006 13:31
von ullmann
@Andre:
Habe einen Textvorschlag in "Verbesserungen an der Dokumentation für PureBasic v4" gepostet.

Gruß Rainer