微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

斯威夫特的传感器

我正在通过 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高​​阶编程意味着我们可以转换一个系统来改变输出中的输入,这些输入是我们系统输出输出……!“负位置”和“正位置”这两个术语有助于暗示否定的消极是积极的,等等.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐