python - 为 Functor 正确实现 fmap?
问题描述
所以,我最近一直在尝试围绕 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, "y": 2, "out": 4}
Functor(input) >> g >> f >> h >> print #results in {"x": 4, "y": 2, "out": 8}
那么,我对函子的理解正确吗?如果是,这是实现fmap的方式,还是您在每个函数周围创建一个包装器以便在各自的包装器内定义fmap或什么?而且,这是跟踪输入状态、发布功能应用程序的方法吗?
解决方案
推荐阅读
- android - 如何使用 Native MultiAutocompleteTextView 实现 Emoji?
- python - 数据质量 - Pandas
- react-native - 同一个屏幕在 react-navigation 的 stacknavigation 中渲染两次或三次
- kubernetes - Kubernetes - 部署 - 配置 livenessProbe
- java - 有没有更好的方法用 Java 流映射映射值?
- rest - 如何使用 Tyk API 管理(或任何其他 API 网关)保护内部 API?
- c# - c# Substitution Cipher解密
- angular - 带有 Angular 6 的 Bootstrap 4 轮播 - ngFor 中的 Ol 链接
- css - 获取自定义模板目录的正确方法
- mysql - 将数据从 csv 导入 mariaDB 缺少第一列