Das schreibt folgende ist mein Nehmen auf einem so lala Emulation eines Lambda-Ausdruck in gnumake:gnumake: wie eine echte Lambda
space := $(strip) $(strip)
comma := ,
# convert a space-separated list in $1 into a comma-separated list:
list2param = $(subst $(space),$(comma),$(strip $1))
# param $1 = quoted GUNmake expression
# param $2 = parameters to the expression as space-separated list
lambda = $(eval _lambda=$1)$(eval _lambda:=$$(call _lambda,$(call list2param,$2)))$(_lambda)
Beispiel:
$(info $(call lambda,$$1 .. $$2 .. $$3,foo bar baz))
Ausgang:
foo .. bar .. baz
Aber das ist weniger als befriedigend, da ich eine Variable "_lambda" hinter dem Vorhang verwenden muss und der Mechanismus ist nicht wirklich wie Lambda da die Bewertung nicht von der Definition getrennt ist. Gibt es einen sauberen, direkten Weg, ein Lambda zu implementieren? Oder ist bereits ein Mechanismus implementiert, den meine blinden prozeduralen Programmieraugen nicht verstanden haben?
Was ist Ihr Hoch -Level-Problem? –
@ MaximEgorushkin In einer Tabelle muss ich einen Sortierschlüssel haben, den ich als Code übergeben habe: '$ (info Sortiertabelle: $ (Aufruf sort_tbl, $ (Aufruf select_from_MEMORY, 1 2, where_name_FBL), 3, $$ (Aufruf lpad, $$ (Call lstrip, $$ 1,0x), 8,0))) '. Das '$$ (call lpad ...' 'nimmt das Element (eine hexadezimale Zahl) von Spalte 1, entfernt das Präfix 0x und belässt es mit Nullen, um einen Schlüssel zu erzeugen, der für make sortierbar ist. – Vroomfondel