Bester syntax für mehrzeilige lambdas?
Verfasst: Freitag 15. November 2013, 19:16
Ich baue aus Spaß an der Freude gerade einen top-down Parser in Python. Die Sprache, die dieser Parser interpretiert, ist an Python angelehnt (Blöcke werden durch Einrückung angezeigt). Das funktioniert auch schon alles wunderbar, allerdings möchte ich, wenn ich schon einmal dabei bin, auch ein paar Verschlimmbesserungen ein bauen.
Aktuelles Projekt: "Function definitions as expressions."
Im Klartext heißt das: Ich will mehrzeilige Lambdas. Guido hat dazu mal gesagt, das es technisch möglich aber für seinen Geschmack zu umständlich sei. ich will das aber trotzdem. Darum!
Mein momentaner Stand ist dieser:
Regel: Die erste nicht-leere Zeile eines Blocks gilt als Referenz für die Einrückung des gesamten Blocks. Ein Block endet vor der ersten nicht-leeren Zeile, die weniger Eingerückt ist als die Referenz-Zeile, oder vor einer schließenden Klammer, die nicht innerhalb des Blockes geöffnet wurde, oder am Ende der Datei.
Beginnt ein Block nicht mit einem NEWLINE, endet der Block nach genau einem Ausdruck. Das sind dann single-line Lambdas. Wie bei Python wird der Wert des Ausdrucks zurück gegeben, als ob davor ein "return" stünde.
Beispiele::
Jetzt meine Fragen: Sind die regeln ausreichend? Gibt es eventuell Mehrdeutigkeiten, die ich übersehen habe? Würdet ihr das anders lösen?
Aktuelles Projekt: "Function definitions as expressions."
Im Klartext heißt das: Ich will mehrzeilige Lambdas. Guido hat dazu mal gesagt, das es technisch möglich aber für seinen Geschmack zu umständlich sei. ich will das aber trotzdem. Darum!

Mein momentaner Stand ist dieser:
Regel: Die erste nicht-leere Zeile eines Blocks gilt als Referenz für die Einrückung des gesamten Blocks. Ein Block endet vor der ersten nicht-leeren Zeile, die weniger Eingerückt ist als die Referenz-Zeile, oder vor einer schließenden Klammer, die nicht innerhalb des Blockes geöffnet wurde, oder am Ende der Datei.
Beginnt ein Block nicht mit einem NEWLINE, endet der Block nach genau einem Ausdruck. Das sind dann single-line Lambdas. Wie bei Python wird der Wert des Ausdrucks zurück gegeben, als ob davor ein "return" stünde.
Beispiele::
Code: Alles auswählen
func = def(a, b):
return a+b
func = def(a, b): a+b
map(iterable, def(s):
return s.upper())
list_of_functions = [
def(a):
return a*2
, def(b):
return b*4
, def(c): c*8
]