Kürzlich (meiner Meinung nach) das Thema Elixier. Es ist eine moderne funktionale Sprache, die nicht so robust ist wie Haskell. Elixier hat viele Reize, aber unter ihnen liegt die Pipe-Verarbeitung von Funktionen in mir. Ich mag es sehr.
So ein Typ
[1, [2], 3, [4, 5] |> List.flatten |> Enum.map(&(&1 * 2))
Sie können den Rückgabewert mit dem Operator |>
an die Funktion auf der rechten Seite übergeben.
Ich habe Python verwendet und wünschte, ich könnte wie oben mehrere Funktionen erstellen.
Ich habe es so gemacht.
def hoge(a, b, c, d) :
return a+b+c+d
pipe([1,2],
[
pmap(lambda x: x*2),
list,
to(hoge, [3, 4]),
print
]
)
Pipe / 2, bis / 2, pmap / 1 sind die, die ich gemacht habe. Jede Rolle ist pipe Das erste Argument ist der Anfangswert für die Pipe-Verarbeitung, und das zweite Argument ist die Liste der Funktionen. Die Implementierung ist
from functools import reduce
def pipe(elm, fn_list) :
return reduce(lambda x, f: f(x), fn_list, elm)
to Eine Funktion höherer Ordnung, die eine selbst erstellte Funktion in eine für eine Pipe-Funktion geeignete Form umwandelt. Die Implementierung ist
def to(fn, outer_args=None) :
def _to(inner_args) :
args = outer_args+inner_args if not outer_args == None else inner_args
return fn(*args)
return _to
pmap Eingewickelte vorhandene Kartenfunktion für die Rohrleitungsfunktion Darüber hinaus werden vorerst aber auch Reduzieren und Filtern vorgenommen
Die Implementierung ist
def pmap(fn) :
def _pmap(li) :
return map(fn, li)
return _pmap
Ich bin zufrieden, weil ich das tun konnte, was ich wollte, indem ich etwas ziemlich Einfaches tat. Der Schreibstil unterscheidet sich jedoch stark vom Standardschreibstil, sodass ich dachte, ich könnte ihn nur mit meinem eigenen Code verwenden.
Recommended Posts