问题描述
因此,最近我一直在尝试围绕Functors,Applicatives和Monads进行思考。以我的理解,这种设计模式允许将“纯功能”与“不纯”功能区分开,并确保没有分支并从给定功能调用不同功能并引起副作用。 >
所以,假设我有一本字典,想在其上应用/编写一些功能。
input = {"x": 2,"y": 5,"out": None}
def f(x):
return x + 2
def g(y):
return y - 3
def h(x,y):
return x * y
class Functor:
def __init__(self,input):
self.input = input
def fmap(self,function):
val = self.input
if function.__name__ == "f":
val["x"] = function(val["x"])
elif function.__name__ == "g":
val["y"] = function(val["y"])
elif function.__name__ == "h":
val["out"] = function(val["x"],val["y"])
elif function.__name__ == "print":
function(val)
else:
print("fmap not defined for this function!")
return Functor(val)
def __rshift__(self,function):
return self.fmap(function)
Functor(input) >> f >> g >> h >> print #results in {"x": 4,"y": 2,"out": 8}
Functor(input) >> h >> g >> h >> print #results in {"x": 2,"out": 4}
Functor(input) >> g >> f >> h >> print #results in {"x": 4,"out": 8}
那么,我对函子的理解正确吗?如果是,这是实现 fmap 的方式,还是围绕每个函数创建包装器以在相应包装器中定义 fmap ? 而且,这是跟踪输入状态,功能发布后应用程序的方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)