斯威夫特的传感器
我正在通过
Haskell学习
Swift中的函数式编程,并遇到了这个有趣的Transducers概念.一个代码示例实现了一个映射函数,它基本上吐出一个传感器,因为我们将转换规则作为参数传递.
灵感,我很快将其翻译成Swift等价物,这就是我得到的: func mapping < A,B,C> (f: A -> B) -> ( ( (C,B) -> C) -> ( (C,A) -> C) ) { return { r in return { result,a in return r(result,f(a)) } } } 我现在的问题是注意转换函数如何从A到B((A – > B)),但是换能器从B变为A(((C,B) – > C) – >((( C,A) – > C))?这是为什么?我确信这不是巧合,因为这个顺序很重要.哈斯克尔专家,有人吗? 解决方法
看看实际发生f的调用.它将A转换为B,结果用作r的参数.因此r必须期待B;我们正在使用A – > B用于预处理输入到(C,B) – > C函数,得到(C,A) – > C功能.
通常,只要我们改变系统以改变其“输入”,就会发生这种逆转.如果我们正在改造一个系统来改变它的“输出”,那就没有逆转1. X -> A ---> A -> B ---> B -> Y 如果我有一个A – > B函数,我想从它做出一些发出Ys的东西,我需要映射一下它的输出B – > Y功能.这被称为协方差,因为我想要改变的事物(A中的B – > B)“随着我在其上映射的函数(B – > Y)而变化.据说B在A – >中处于积极的位置. B. 如果我有一个A – > B函数,我想从它做一些取代Xs的东西,我需要映射一个X – >一个功能超过其输入.这被称为逆变,因为我想要改变的东西(A中的A – > B)“与我映射的函数(X – > A)不同”.据说A在A – >中处于负位置. B. 1高??阶编程意味着我们可以转换一个系统来改变输出中的输入,这些输入是我们系统输出的输出……!“负位置”和“正位置”这两个术语有助于暗示否定的消极是积极的,等等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |