Seite 2 von 2
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 13:35
von Kaeru Gaman
das ist völlig richtig, das ist ja auch die logische Verwendung.
aber sowie du eine Zuweisung eines Wertes durchführen willst, brauchst du eine arithmetische Operation.
auf eine Wertübergabe trifft das ebenso zu.
also zu schreiben
ProcedureReturn [Funktion]
ist so wie
Ergebnis = [Funktion]
aber ganz anders als
If [Funktion]
in den ersten beiden Fällen fungiert die Funktion als [Wert], im letzten als [Ausdruck].
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 17:51
von Josh
ich wollte mich eigentlich auch zurückhalten, da das thema schon mal diskutiert worden ist. ich kann eueren aussagen aber noch immer überhaupt nicht folgen. was meint ihr, was mit den bedingungen hinter einer if anweisung passiert?
ob da ein <, =, <>, AND, NOT oder sonst was steht, ist doch vollkommen egal. es sind alles vergleiche, die ein true oder false liefern. in welcher priorität die vergleiche ausgeführt werden, ist in der hilfe eindeutig beschrieben. das ganze wird so lange aufgelöst, bis zwei möglichkeiten über bleiben:
if #true
if #false
ihr könnt es ja leicht selber testen. AND, OR, XOR, NOT liefern einen eindeutigen boolschen wert, wenn ein paar regeln eingehalten werden. der rückgabewert muss ein integer sein (ich nehme mal an, dass es ein integer ist und kein long, kann es auf einem x64 nicht probieren). reine zahlen funktionieren nicht immer, also müssen die in einen eindeutigen variablentyp überführt werden. welchen ist egal. ganz sicher bin ich mir nicht, aber ich glaube, wenn die beiden werte schon boolsche werte sind, ist auch der variablentyp des rückgabewertes egal.
eine kleine ausnahme bildet der NOT operator. aber auch hier lässt sich die hilfe eindeutig aus, nämlich dass der wert auf der rechten seite verwendet wird. also kann es nach meiner logik auch einen wert auf der linken seite geben und genau so ist es auch. der ausdruck x NOT y liefert einen eindeutiges true oder false, wobei der wert auf der linken seite einfach ignoriert wird. da man ja über jeden vergleich beliebig eine klammer setzen kann, ist es für mich auch erklärlich, warum das in klammer dann auch ohne den ersten wert funktioniert.
die andere ausnahme ist generell ein eigenheit von basic. das zeichen = kann halt als vergleichs und als zuweisungsoperator dienen. wenn es in einer if-anweisung steht, dann ist es eindeutig ein vergleichsoperator. aber vieleicht spendiert uns fred ja noch mal einen richtigen == vergleichsoperator.
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 18:09
von Kaeru Gaman
hä? woduwolle?
es wird schon seit jahren gepredigt, dass PureBasic keine Bool'schen Berechnungen unterstützt.
so etwas wie a = ( b > a ) ist schlichtweg nicht möglich.
also, es ist völlig belanglos, was du da versuchst zu argumentieren mit der Verarbeitung einer If-Anweisung.
wenn du logische Operationen irgendwo hin packst, wo Purebasic nur arithmetische Operationen akzeptiert, dann baust du Scheiße!
... ist denn das so schwierig zu verstehen ...?
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 19:21
von Josh
Kaeru Gaman hat geschrieben:so etwas wie a = ( b > a ) ist schlichtweg nicht möglich
bei den vergleichsoperatoren hast du auf jeden fall recht, dass diese pb genau wie das IstGleich nur innerhalb der if-anweisung aktzeptiert.
Kaeru Gaman hat geschrieben:es wird schon seit jahren gepredigt, dass PureBasic keine Bool'schen Berechnungen unterstützt.
im christentum wird schon seit 2000 jahren gepredigt, aber der wahrheitsgehalt ist sicher kein thema für hier.
Kaeru Gaman hat geschrieben:wenn du logische Operationen irgendwo hin packst, wo Purebasic nur arithmetische Operationen akzeptiert, dann baust du Scheiße!
wo steht, dass ich meine logischen operatoren nicht hinpappen darf, wo ich will? in der hilfe steht:
"Das Resultat dieses Operators wird der umgekehrte Wert des logischen Ausdrucks auf RS sein. Der Wert wird entsprechend der nachfolgenden Tabelle gesetzt. Dieser Operator kann nicht mit Strings verwendet werden."
es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
Kaeru Gaman hat geschrieben:... ist denn das so schwierig zu verstehen ...?
JA
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 21:35
von Kaeru Gaman
Josh hat geschrieben:in der hilfe steht:
"Das Resultat dieses Operators wird der umgekehrte Wert des logischen Ausdrucks auf RS sein. Der Wert wird entsprechend der nachfolgenden Tabelle gesetzt. Dieser Operator kann nicht mit Strings verwendet werden."
es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
genau.
mit If, nicht mit = oder Zahlen.
Josh hat geschrieben:wo steht, dass ich meine logischen operatoren nicht hinpappen darf, wo ich will?
Programmieren darf man selbstverständlich wo dass hinpappen will Alles doch ist da nicht wo beim...
dass man beim Programmieren nicht Alles da hinpappen darf wo man will ist doch selbstverständlich...
gell? der Satz fängt irgendwie logisch an und verliert sich dann in totalem Chaos.
... so Programme sieht man auch ab und zu mal...
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 23:00
von Josh
Kaeru Gaman hat geschrieben:genau.
mit If, nicht mit = oder Zahlen.
wo steht in der hilfe was von if? da steht genau das, was ich oben zitiert habe, nicht mehr und nicht weniger. das mit dem if hast du dazugedichtet.
also zusammenfassend für die logischen operatoren:
- es funktioniert, sofern es ein definierter variablentyp ist und der rückgabewert ein integer ist
- in der hilfe steht nichts, dass man logische operatoren nur in einer if-anweisung einsetzen darf
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 23:06
von Kaeru Gaman
Josh hat geschrieben:wo steht in der hilfe was von if? da steht genau das, was ich oben zitiert habe, nicht mehr und nicht weniger. das mit dem if hast du dazugedichtet.
Josh hat geschrieben: in der hilfe steht: ...
aber da ist zumindest ein beispiel mit einer if-anweisung.
Josh hat geschrieben:- in der hilfe steht nichts, dass man logische operatoren nur in einer if-anweisung einsetzen darf
weißt du, das ist mir zu doof.
entweder du lernst, was PB kann und was PB nicht will,
oder du schreibst dir deinen eigenen Compiler.
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 06.02.2010 23:45
von Josh
Josh hat geschrieben:es steht zwar bei den vergleichsoperatoren auch nichts näher dabei, aber da ist zumindest ein beispiel mit einer if-anweisung.
Kaeru Gaman hat geschrieben:Josh hat geschrieben: in der hilfe steht: ...
aber da ist zumindest ein beispiel mit einer if-anweisung.
und warum zitierst du nur den zweiten teil meines satzes und reißt es vollkommen aus dem zusammenhang? ich habe geschrieben, dass bei
vergleichsoperatoren was von einer if-anweisung steht. fakt ist noch immer, dass in der hilfe bei den logischen operatoren
nichts steht, dass sie nur in if-anweisungen eingesetzt werden dürfen.
Kaeru Gaman hat geschrieben:entweder du lernst, was PB kann und was PB nicht will,
oder du schreibst dir deinen eigenen Compiler.
klar will ich lernen, was PB kann und will. PB
kann logische operatoren auch außerhalb von if-anweisungen verwenden und die hilfe sagt nichts gegenteiliges. die argumente dagegen haben sich hier eigentlich nur darauf beschränkt, dass es falsch ist, dass es nicht vogesehen ist und dass es schon seit jahren gepredigt wird.
aber ich glaube auch, dass es besser ist das thema einfach zu belassen. soll jeder verwenden oder nicht wie er will.
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 07.02.2010 00:20
von Kaeru Gaman
dann schreib halt einen Bericht darüber, inwieweit die Help unvollständig ist.
du kannst auch mal das englische und das deutsche Forum durchsuchen,
nach Postings wo Freak und Fred selber schreiben, dass Bool'sche Ausdrücke nicht
verwendet werden sollen, weil PB nicht darauf ausgelegt ist, sie vernünftig auszuwerten.
also, von mir aus darfst du gerne schreiben was du willst,
du wirst lachen, der Workaround stammt von mir.
Aber wenn deine codes dann in zukünftigen PB-Versionen nicht mehr funktionieren, beschwehr dich nicht.
und btw ist geplant, eine Boolean()-Funktion zu implementieren, die #True oder #False als Zahlenwerte zurückgibt.
Re: ProcedureReturn Not [Variable] = Fehler
Verfasst: 07.02.2010 16:55
von mk-soft
Stimmt, da war was...
Code: Alles auswählen
Macro BOOL(assert)
((assert) Or #False)
EndMacro
a = 10
b = 20
c = BOOL(a > b)
Debug c
c = BOOL(a < b)
Debug c
c = BOOL(a = b)
Debug c
ASM
Code: Alles auswählen
;
; Macro BOOL(assert)
;
; a = 10
MOV dword [v_a],10
; b = 20
MOV dword [v_b],20
;
; c = BOOL(a > b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JG Ok0
JMP No0
Ok0:
MOV eax,1
JMP End0
No0:
XOR eax,eax
End0:
MOV dword [v_c],eax
; Debug c
; c = BOOL(a < b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JL Ok1
JMP No1
Ok1:
MOV eax,1
JMP End1
No1:
XOR eax,eax
End1:
MOV dword [v_c],eax
; Debug c
; c = BOOL(a = b)
MOV ebx,dword [v_a]
CMP ebx,dword [v_b]
JE Ok2
JMP No2
Ok2:
MOV eax,1
JMP End2
No2:
XOR eax,eax
End2:
MOV dword [v_c],eax
; Debug c
;
P.S. War bestimmt von Fred nicht so gedacht. Aber manchmal machen Programme sachen die man nicht erwartet und trotzdem funktionieren.