アップデート
これらの関数の効果の 1 つは、通常はサポートされないメソッドでメソッド チェーンを使用する方法を提供することであるため*chain
、それぞれおよびを呼び出すことを検討していcopychain
ます。copychain
ただし、少なくとも関数型プログラミングに関しては、自称は間違いなくより基本的な概念であるため、これは理想的とは言えません。
オリジナル
とりあえず~と呼んでいboxer
ます。問題は一般的ですが、コードはPythonです。
def boxer(f):
"""Return a function g(o, *args, **keyargs) -> o
`g` calls `f` on `o` with the remaining arguments
and returns `o`.
>>> l = [2]
>>> def increment_list_element(l, i):
... l[0] += i
>>> adder = boxer(increment_list_element)
>>> adder(l, 2)
[4]
>>> def multiply_list_element(l, i):
... l[0] *= i
>>> multiplier = boxer(multiply_list_element)
>>> sum(multiplier(l, 6))
24
"""
def box(o, *args, **keyargs):
f(o, *args, **keyargs)
return o
return box
同様の概念は、予定の譲受人をコピーし、そのコピーを割り当てて返します。これは " shadow_boxer
" です:
from copy import deepcopy
def shadow_boxer(f):
"""Return a function g(o, *args, **keyargs) -> p
`g` deepcopies `o` as `p`,
executes `f` on `p` with the remaining arguments,
and returns `p`.
>>> l = [2]
>>> def increment_list_element(l, i):
... l[0] += i
>>> adder = shadow_boxer(increment_list_element)
>>> adder(l, 2)
[4]
>>> def multiply_list_element(l, i):
... l[0] *= i
>>> multiplier = shadow_boxer(multiply_list_element)
>>> sum(multiplier(l, 6))
12
"""
def shadow_box(o, *args, **keyargs):
p = deepcopy(o)
f(p, *args, **keyargs)
return p
return shadow_box
さらに、この種のことについてもっと学ぶためのリソースについて知りたいのですが、「これらの種類のもの」の名前も同様にわかりません. 関数型プログラミングに関連しているように見えますが、私が理解しているように、これらの手法は真の関数型言語では不要です。