Code: Alles auswählen
>>> a = 200
>>> if 100 < a < 300:
... print("Ist drin")
...
Ist drin
Code: Alles auswählen
>>> a = 200
>>> if 100 < a < 300:
... print("Ist drin")
...
Ist drin
Code: Alles auswählen
<script type="text/javascript">
var a = 200;
if (100 < a < 300)
{
document.write("<b>Ist drin.</b>");
}
</script>
R5RS Scheme kann das:numerix hat geschrieben:Ich wüsste gern, ob es noch andere Programmiersprachen gibt, wo diese elegante Kombination von Vergleichsoperatoren möglich ist.
Code: Alles auswählen
(define a 200)
(if (< 100 a 300)
(display "Ist drin\n")
#f)
Und selbst wenn es nicht gehen würde, dann könnte man sich auf triviale Weise einen Operator schreiben, bei dem es geht.PLT Scheme Dokumentation hat geschrieben:Returns #t if the arguments in the given order are in strictly increasing, #f otherwise.
Code: Alles auswählen
class int:
def __lt__(self, other):
return ChainedOp(LT, self, other)
class ChainedOp:
def __init__(self, op, a, b):
self.op, self.a, self.b = op, a, b
def __lt__(self, other):
return self and ChainedOp(LT, self.b, other)
def __nonzero__(self):
return self.op(self.a, self.b)
``a < b < c`` wäre zwar gültiger Syntax, aber es wird nicht das heraus kommen, was du dir erwartest.sma hat geschrieben:C++ müsste eigentlich auch gehen.
Bei mir schon oO Ohne Probleme...bremer hat geschrieben:Dieser JavaScript-Code funktioniert jedenfalls nicht.Code: Alles auswählen
<script type="text/javascript"> var a = 200; if (100 < a < 300) { document.write("<b>Ist drin.</b>"); } </script>
Nagut, soweit hab ich wohl diesmal gar nicht gedacht. Danke für die InfoTrundle hat geschrieben:@BlackVivi: Nein, es funktioniert nicht. Es ist gültige Syntax, ist aber gleichbedeutend mit (100 < a) < 300. Mach halt mal ``1 < 2 < 2``, das ergibt wahr, was es aber nicht sollte (bzw. was du nicht wolltest. Sollen tut es das schon). Syntaktisch erlaubt ist das in recht vielen Sprachen.
sma hat doch geschrieben, dass man es selbst implementieren müsste.sebastinas hat geschrieben:``a < b < c`` wäre zwar gültiger Syntax, aber es wird nicht das heraus kommen, was du dir erwartest.sma hat geschrieben:C++ müsste eigentlich auch gehen.
Missverständnis: Ich meinte, es müsste gehen, den < Operator wie gezeigt zu überschreiben. Dass das so nicht geht, ist klar.sebastinas hat geschrieben:``a < b < c`` wäre zwar gültiger Syntax, aber es wird nicht das heraus kommen, was du dir erwartest.sma hat geschrieben:C++ müsste eigentlich auch gehen.
Ja, ich auch. Ist einfach der "Steigt streng monoton"-Operator. Wenn ich die HyperSpec richtig lese dann ist bei Common Lisp genau das selbe möglich - ist ja auch logisch. Ein kurzer Test in Clojure hat gezeigt, dass es dort ebenfalls möglich ist. Daher kann man Annehmen, dass dies ein durchaus populäres Feature der Lisp-Familie ist.sma hat geschrieben:PS: Die Scheme-Syntax finde ich sehr lesbar, denn das (< 1 2 3) ist nur konsequent, wenn es ein (+ 1 2 3) gibt.